Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
SC10-3066-03
AS/400e
SC10-3066-03
Nota! Antes de utilizar esta informacin y el producto al que hace referencia, asegrese de leer la informacin general en Avisos en la pgina 611.
Cuarta edicin (Abril 2000) Esta edicin corresponde a la Versin 4, Release 5, Nivel de modificacin 1, de IBM WebSphere Development Tools para AS/400 (Programa 5769-CL3) y a todos los releases y modificaciones posteriores hasta que no se indique lo contrario en nuevas ediciones. Esta edicin sustituye a la publicacin SC10-3066-02. Los cambios o las adiciones al texto o a las ilustraciones estn indicados con una lnea vertical a la izquierda del cambio o la adicin. Solicite las publicaciones a travs de su representante de IBM o la sucursal de IBM que atiende a su localidad. Las publicaciones no estn almacenadas en la direccin que se proporciona ms abajo. IBM agradece sus comentarios. Puede dirigir sus comentarios a: IBM, S.A. National Language Solutions Center Avda. Diagonal, 571 08029 Barcelona Espaa Tambin puede enviar sus comentarios por fax: Desde Espaa: (93) 321 61 34 Desde otros pases: 34 3 321 61 34 Si tiene acceso a Internet, puede enviar sus comentarios electrnicamente a: hojacom@vnet.ibm. Consulte el apartado Cmo enviar comentarios en la pgina xiii para obtener una descripcin de los mtodos. Cuando enva informacin a IBM, otorga a IBM un derecho no exclusivo de utilizar o distribuir la informacin de cualquier manera que considere adecuada, sin incurrir en ninguna obligacin hacia usted. Copyright International Business Machines Corporation 1994, 2000. Reservados todos los derechos.
Contenido
Acerca de este manual . . . . . . . . xi
Requisitos previos e informacin relacionada La biblioteca VisualAge RPG . . . . . Cmo enviar comentarios . . . . . . Acceso a informacin en lnea . . . . . Utilizacin de los manuales en lnea . . Publicaciones en formato PDF . . . . Utilizacin de la ayuda en lnea . . . . xi . . . xii . . . xiii . . . xiii . . . xiii . . . xiv . . . xiv . . Indicadores resultantes . . . . . . . . . Indicador de ltimo registro (LR) . . . . . . Utilizacin de indicadores . . . . . . . . . Indicadores de relacin de registros de campos Indicadores para el condicionamiento de clculos Indicadores utilizados en expresiones. . . . . Indicadores de condicionamiento de salida . . . Indicadores referidos como datos . . . . . . . *IN . . . . . . . . . . . . . . . . *INxx . . . . . . . . . . . . . . . Reglas para la especificacin de indicadores referidos como datos . . . . . . . . . . Resumen de indicadores . . . . . . . . . . 19 21 21 21 22 24 24 25 25 25 25 27
. 32
Captulo 3. Indicadores. . . . . . . . 17
Indicadores definidos en las especificaciones . Indicadores de identificacin de registro . . Indicadores de campo . . . . . . . .
Copyright IBM Corp. 1994, 2000
. . .
. 17 . 17 . 18
iii
Declaraciones de variables del lenguaje principal Reglas de las variables del lenguaje principal . . Estructuras de datos como variables del lenguaje principal . . . . . . . . . . . . . . Variables de indicador y estructuras . . . . . Reglas de la estructura del lenguaje principal . . Sentencia /EXEC SQL INCLUDE . . . . . . Sentencia /EXEC SQL INCLUDE SQLCA . . . Sentencia /EXEC SQL WHENEVER . . . . . Sentencia /EXEC SQL BEGIN DECLARE . . . Manejo de errores durante la ejecucin . . . . Construccin de una aplicacin . . . . . . . . Ejecucin de una aplicacin . . . . . . . . . Conexin a una base de datos . . . . . . . . Utilizacin de la sentencia CONNECT TO . . . Utilizacin de una conexin implcita. . . . .
72 73 74 74 75 75 75 76 77 78 78 78 79 79 80
Separadores . . . . . . . . . . . . Datos de indicacin de la hora . . . . . . Separadores . . . . . . . . . . . . Soporte de valores nulos de base de datos. . . Soporte controlado por el usuario para campos con posibilidad de nulos y campos de clave . Soporte de slo entrada para campos con posibilidad de nulos . . . . . . . . . Opcin de campos sin nulos . . . . . . Conversin de campos de base de datos de longitud variable . . . . . . . . . . .
. . . .
Parte 2. Datos . . . . . . . . . . . 93
Captulo 9. Tipos de datos y formatos de datos . . . . . . . . . . . . . . 95
Formatos internos y externos . . . . . . . Formato interno . . . . . . . . . . . Formato externo . . . . . . . . . . . Tipo de datos puntero de base . . . . . . . Establecimiento de un puntero de base . . . . Ejemplos . . . . . . . . . . . . . . Tipo de datos carcter . . . . . . . . . Formato carcter . . . . . . . . . . Formato indicador. . . . . . . . . . Formato grfico . . . . . . . . . . Formato UCS-2 . . . . . . . . . . . Formato carcter, grfico y UCS-2 de longitud variable . . . . . . . . . . . . . Conversin entre datos de tipo carcter, grfico y UCS-2 . . . . . . . . . . . . . Datos de fecha . . . . . . . . . . . . Separadores . . . . . . . . . . . . Formatos para operaciones MOVE, MOVEL y TEST . . . . . . . . . . . . . . Tipo de datos numrico . . . . . . . . . Formato binario . . . . . . . . . . Formato flotante . . . . . . . . . . Formato entero . . . . . . . . . . . Formato decimal empaquetado . . . . . Formato sin signo . . . . . . . . . . Formato decimal con zona . . . . . . . Consideraciones para utilizar formatos numricos . . . . . . . . . . . . Representacin de formatos numricos . . . Tipo de datos puntero de procedimiento . . . Datos de hora . . . . . . . . . . . . . 95 . 96 . 96 . 98 . 99 . 99 . 102 . 103 . 103 . 104 . 105 . 105 . 111 . 112 . 114 . . . . . . . . . . . . 114 114 115 117 118 119 120 121 122 123 125 126
iv
Bsqueda en una matriz sin un ndice . . . . Bsqueda en una matriz con un ndice . . . . Utilizacin de matrices . . . . . . . . . . Especificacin de una matriz en los clculos . . Clasificacin de matrices . . . . . . . . . Clasificacin utilizando parte de la matriz como una clave . . . . . . . . . . . . . . Salida de matriz . . . . . . . . . . . . Edicin de toda una matriz. . . . . . . . Tablas . . . . . . . . . . . . . . . . LOOKUP con una tabla . . . . . . . . . LOOKUP con dos tablas. . . . . . . . . Especificacin del elemento de tabla encontrado en una operacin LOOKUP. . . . . . . .
166 167 168 168 169 169 170 170 171 171 171 172
CVTOPT(*{NO}VARCHAR *{NO}VARGRAPHIC). . . . . . . . . DATEDIT(fmt{separador}) . . . . . . . DATFMT(fmt{separador}) . . . . . . . DEBUG{(*NO | *YES)} . . . . . . . . DECEDIT(valor) . . . . . . . . . . EXE . . . . . . . . . . . . . . EXPROPTS(*MAXDIGITS | *RESDECPOS) . EXTBININT{(*NO | *YES)} . . . . . . . FLTDIV{(*NO | *YES)} . . . . . . . . GENLVL(nmero) . . . . . . . . . . INDENT(*NONE | valor-carcter) . . . . INTPREC(10 | 20) . . . . . . . . . . LIBLIST(archivo1 archivo2 ... archivon) . . NOMAIN . . . . . . . . . . . . OPTION(*{NO}XREF *{NO}GEN *{NO}SECLVL *{NO}SHOWCPY *{NO}EXPDDS *{NO}EXT *{NO}SHOWSKP) . . . . . . . . . . SQLBINDFILE(archivo) . . . . . . . SQLDBBLOCKING(*YES | *NO) . . . . . SQLDBNAME(base de datos) . . . . . SQLDTFMT(*EUR | *ISO | *USA | *JIS) . . SQLISOLATIONLVL(*RR | *CS | *UR) . . . SQLPACKAGENAME(paquete.txt) . . . . SQLPASSWORD(contrasea) . . . . . . SQLUSERID(ID de usuario) . . . . . . TIMFMT(fmt{separador}) . . . . . . . TRUNCNBR(*YES | *NO) . . . . . . .
. . . . . . . . . . . . . .
204 205 205 205 206 206 206 206 207 207 207 208 208 208
. . . . . . . . . . .
208 209 210 210 210 211 211 211 212 212 212
Contenido
PREFIX(serie_prefijo{:nm_de_car_sustit}) . PROCNAME(nombre_procedimiento) . . PRTCTL(estruct_datos{:*COMPAT}) . . . RCDLEN(nombre de campo) . . . . . RECNO(nombre de campo) . . . . . REMOTE . . . . . . . . . . . . RENAME(formato_externo:formato_interno) TIMFMT(formato{separador}) . . . . . USROPN . . . . . . . . . . . . Tipos de archivo y mtodos de proceso. . .
. . . . . . . . . .
. . . . . . . . . .
223 223 223 224 225 225 225 225 226 226
OCCURS(constante_numrica). . . . . OPTIONS(*OMIT *VARSIZE *STRING *RIGHTADJ). . . . . . . . . . . OVERLAY(nombre{:pos | *NEXT}) . . . PACKEVEN . . . . . . . . . . . PERRCD(constante_numrica) . . . . . PREFIX(serie_prefijo{:nm_de_car_sustit}) . PROCPTR . . . . . . . . . . . STATIC . . . . . . . . . . . . STYLE(tipo_estilo) . . . . . . . . . TIMFMT(formato{separador}) . . . . . TOFILE(nombre_archivo) . . . . . . VALUE . . . . . . . . . . . . VARYING . . . . . . . . . . . Resumen segn el tipo de especificacin de definicin . . . . . . . . . . . .
. . . . . . . . . . . . . .
. 251 . . . . . . . . . . . . 252 257 259 260 260 260 260 261 261 261 262 262
. 262
vi
. . . . . . campo) . . .
. . . .
. . . .
. . . .
Identificacin de registro y entradas de control Posiciones 7-16 (Nombre de registro) . . Posiciones 16-18 (Relacin lgica externa) . Posicin 17 (Tipo) . . . . . . . . . Posiciones 18-20 (Adicin de registros) . . Posiciones 21-29 (Indicadores de salida) . Posiciones 30-39 (Nombre EXCEPT) . . . Descripcin de campo y entradas de control . Posiciones 21-29 (Indicadores de salida) . Posiciones 30-43 (Nombre de campo) . . Posicin 45 (Blanco despus) . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
300 300 300 300 301 301 301 301 301 301 302
Contenido
vii
%INTH (Convertir en formato de entero con redondeo) . . . . . . . . . . . . . %LEN (Obtener o establecer longitud) . . . . %NULLIND (Consultar o establecer indicador de nulo) . . . . . . . . . . . . . . %OPEN (Devolver condicin de apertura de archivo) . . . . . . . . . . . . . . %PADDR (Obtener direccin de procedimiento) %REM (Devolver resto entero) . . . . . . %REPLACE (Sustituir serie de caracteres) . . . %SCAN (Explorar caracteres) . . . . . . . %SETATR (Establecer atributo) . . . . . . %SIZE (Tamao de constante o campo). . . . %STATUS (Devolver estado de archivo o de programa) . . . . . . . . . . . . . %STR (Obtener o almacenar serie con terminacin de nulo) . . . . . . . . . . %SUBST (Devolver una serie) . . . . . . . %SUBST Utilizado para su valor . . . . . . %SUBST Utilizado como resultado de una asignacin . . . . . . . . . . . . . %TRIM (Eliminar blancos iniciales y de cola) %TRIML (Eliminar blancos iniciales). . . . . %TRIMR (Eliminar blancos de cola) . . . . . %UCS2 (Convertir a valor UCS-2) . . . . . %UNS (Convertir en formato sin signo) . . . %UNSH (Convertir en formato sin signo con redondeo) . . . . . . . . . . . . . %XFOOT (Sumar elementos de expresin de matriz) . . . . . . . . . . . . . .
330 330 332 333 333 334 335 337 337 338 339 341 343 344 344 345 345 346 346 347 348 348
367
. . . . . . . . 367 369 369 371 371 372 372 372
. 373
Operaciones de comparacin . . . . . . . . Operaciones de rea de datos . . . . . . . . Operaciones de fecha . . . . . . . . . . . Adicin o resta de fechas . . . . . . . . Clculo de las duraciones entre fechas . . . . Resultados inesperados . . . . . . . . . Operaciones declarativas . . . . . . . . . Operaciones que utilizan expresiones . . . . . Operaciones de archivos. . . . . . . . . . Operaciones de establecimiento de indicador . . . Operaciones de informacin . . . . . . . . Operaciones de inicializacin . . . . . . . . Operaciones de gestin de memoria . . . . . . Operaciones de mensaje . . . . . . . . . . Operaciones Mover . . . . . . . . . . . Cmo mover datos de tipo carcter, grfico, UCS-2 y numrico . . . . . . . . . . . Cmo mover los datos de fecha y hora . . . . Ejemplos de conversin de un campo de caracteres en un campo de fecha . . . . . . Operaciones de serie . . . . . . . . . . . Operaciones de programacin estructuradas . . . Operaciones de subrutina . . . . . . . . . Operaciones de comprobacin . . . . . . . . Operaciones de GUI . . . . . . . . . . . Los detalles de los cdigos de operacin . . . . ADD (Aadir) . . . . . . . . . . . . ADDDUR (Aadir duracin) . . . . . . . ALLOC (Asignar almacenamiento) . . . . . ANDxx (Y) . . . . . . . . . . . . . BEGACT (Empezar subrutina de accin) . . . BEGSR (Empezar subrutina de usuario) . . . BITOFF (Desactivar los bits) . . . . . . . BITON (Activar los bits) . . . . . . . . . CABxx (Comparar y bifurcar) . . . . . . . CALL (Llamar a un programa AS/400) . . . . CALLB (Llamar a una funcin) . . . . . . CALLP (Llamar a un procedimiento o programa con prototipo) . . . . . . . . . . . . CASxx (Invocar subrutina condicionalmente) CAT (Concatenar dos series) . . . . . . . CHAIN (Recuperacin aleatoria desde un archivo) . . . . . . . . . . . . . . CHECK (Comprobar caracteres) . . . . . . CHECKR (Comprobacin inversa) . . . . . CLEAR (Borrar) . . . . . . . . . . . CLOSE (Cerrar archivos) . . . . . . . . CLSWIN (Cerrar ventana) . . . . . . . . COMMIT (Comprometer) . . . . . . . . COMP (Comparar) . . . . . . . . . . DEALLOC (Liberar almacenamiento) . . . . DEFINE (Definicin de campo) . . . . . . DELETE (Suprimir registro) . . . . . . . DIV (Dividir) . . . . . . . . . . . . DO (Hacer) . . . . . . . . . . . . . DOU (Hacer hasta) . . . . . . . . . . DOUxx (Hacer hasta). . . . . . . . . . DOW (Hacer mientras) . . . . . . . . . DOWxx (Hacer mientras) . . . . . . . . DSPLY (Visualizar ventana de mensaje). . . . ELSE (En caso contrario) . . . . . . . .
375 376 377 378 378 379 379 380 380 382 382 382 382 384 384 384 386 387 389 390 391 392 392 392 392 393 395 396 397 400 400 401 402 404 407 408 409 411 414 417 419 422 424 424 425 426 426 428 431 432 433 435 436 438 439 441 442
viii
ENDyy (Finalizar un grupo estructurado) . . ENDACT (Fin de subrutina de accin) . . . ENDSR (Fin de subrutina de usuario) . . . EVAL (Evaluar expresin) . . . . . . . EVALR (Evaluar expresin, ajuste por la derecha) . . . . . . . . . . . . . EXCEPT (Salida en tiempo de clculo) . . . EXSR (Invocar subrutina de usuario) . . . EXTRCT (Extraer fecha/hora/indicacin de la hora) . . . . . . . . . . . . . . FEOD (Forzar fin de datos) . . . . . . . FOR (Para) . . . . . . . . . . . . GETATR (Recuperar atributo) . . . . . . GOTO (Ir a) . . . . . . . . . . . . IF (Si) . . . . . . . . . . . . . . IFxx (Si) . . . . . . . . . . . . . IN (Recuperar un rea de datos) . . . . . ITER (Iterar). . . . . . . . . . . . KFLD (Definir partes de una clave) . . . . KLIST (Definir una clave compuesta) . . . LEAVE (Abandonar un grupo DO/FOR) . . LEAVESR (Abandonar una subrutina) . . . LOOKUP (Buscar un elemento en tabla o matriz) . . . . . . . . . . . . . MOVE (Mover). . . . . . . . . . . MOVEA (Mover matriz) . . . . . . . . MOVEL (Mover a la izquierda) . . . . . MULT (Multiplicar) . . . . . . . . . MVR (Mover resto) . . . . . . . . . OCCUR (Establecer/Obtener aparicin de una estructura de datos) . . . . . . . . . OPEN (Abrir archivo para proceso) . . . . ORxx (O) . . . . . . . . . . . . . OTHER (De lo contrario, seleccionar) . . . OUT (Grabar un rea de datos) . . . . . PARM (Identificar parmetros) . . . . . PLIST (Identificar una lista de parmetros) . POST (Anotar) . . . . . . . . . . . READ (Leer un registro). . . . . . . . READC (Leer siguiente registro modificado) . READE (Leer clave igual) . . . . . . . READP (Leer registro anterior) . . . . . READPE (Leer igual anterior) . . . . . . READS (Leer seleccionados) . . . . . . REALLOC (Reasignar almacenamiento con longitud nueva) . . . . . . . . . . RESET (Restablecer) . . . . . . . . . RETURN (Volver al llamador) . . . . . . ROLBK (Retrotraer) . . . . . . . . . SCAN (Buscar serie) . . . . . . . . . SELECT (Iniciar un grupo de seleccin) . . SETATR (Establecer atributo) . . . . . . SETGT (Establecer mayor que) . . . . . SETLL (Establecer lmite inferior) . . . . . SETOFF (Desactivar indicador) . . . . . SETON (Activar indicador) . . . . . . . SHOWWIN (Visualizar ventana) . . . . . SORTA (Clasificar una matriz) . . . . . . SQRT (Raz cuadrada) . . . . . . . . START (Iniciar un componente lgico o Llamar a programa local) . . . . . . . . . .
. . . .
. 447 . 448 . 449 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452 453 453 455 457 457 458 460 461 462 463 464 465 466 468 483 489 497 498 499 502 503 504 505 506 508 509 510 513 514 516 518 520 521 522 525 526 527 530 531 532 534 537 537 538 539 540
STOP (Detener un componente lgico) . . . SUB (Restar). . . . . . . . . . . . SUBDUR (Restar duracin) . . . . . . . SUBST (Subserie) . . . . . . . . . . TAG (Etiqueta) . . . . . . . . . . . TEST (Comprobar fecha/hora/indicacin de la hora) . . . . . . . . . . . . . . TESTB (Comprobar bit) . . . . . . . . TESTN (Comprobar numrico) . . . . . TESTZ (Comprobar zona) . . . . . . . TIME (Hora del da) . . . . . . . . . UNLOCK (Desbloquear un rea de datos o Liberar un registro) . . . . . . . . . UPDATE (Modificar registro existente) . . . WHEN (Seleccionar cuando sea verdadero) . WHENxx (Seleccionar cuando sea verdadero) WRITE (Crear nuevos registros) . . . . . XFOOT (Sumar los elementos de una matriz) XLATE (Convertir) . . . . . . . . . Z-ADD (Poner a cero y sumar) . . . . . Z-SUB (Poner a cero y restar) . . . . . .
. . . . . . . . . .
542 543 543 546 548 549 551 553 554 554
579
. 579 . 582
Apndice D. Valores CCSID soportados . . . . . . . . . . . . 585 Apndice E. Comparacin de los compiladores RPG . . . . . . . . . 587
Ciclo RPG . . . . . . . . . . . . Indicadores de VisualAge RPG . . . . Indicadores no soportados . . . . . . Palabras no soportadas . . . . . . . . Directivas del compilador . . . . . . . Manejo de excepciones y errores . . . . . Datos . . . . . . . . . . . . . . Tipos de datos y formatos de datos . . . Literales y constantes con nombre . . . reas de datos . . . . . . . . . . Matrices y tablas . . . . . . . . . Cdigos de edicin . . . . . . . . Archivos . . . . . . . . . . . . . Especificaciones . . . . . . . . . . Especificaciones de control . . . . . . Especificaciones de descripcin de archivo Especificaciones de definicin . . . . . Especificaciones de entrada. . . . . . Funciones incorporadas . . . . . . . . Cdigos de operacin . . . . . . . . Cdigos de operacin similares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587 587 587 588 588 588 588 588 589 589 590 590 590 590 590 591 593 594 594 595 595
. 541
Contenido
ix
Cdigos de operacin no soportados . . . . 595 Cdigos de operacin especficos de VisualAge RPG . . . . . . . . . . . . . . . 595 Conversiones entre CCSID . . . . . . . . 596
Avisos . . . . . . . . . . . . . . 611
Informacin de interfaz de programacin . Marcas registradas y marcas de servicio . . . . . . 612 . 612
Glosario
. . . . . . . . . . . . . 597
ndice. . . . . . . . . . . . . . . 613
Bibliografa . . . . . . . . . . . . 609
AS/400 Information Center contiene informacin importante sobre temas tales como las particiones lgicas, los clsters, Java, TCP/IP, los servicios Web y las redes seguras. Tambin contiene enlaces con sitios Web de Internet como la biblioteca en lnea de AS/400 y AS/400 Technical Studio. Asimismo, hay un enlace en el que se describe a un alto nivel las diferencias en cuanto a informacin existentes entre Information Center y la biblioteca en lnea. Si desea obtener las publicaciones de AS/400 en formato de software, consulte el CD-ROM AS/400e Biblioteca en soporte software, SK3T-1325-04 (SK3T-0118-04).
xi
Esta gua de aprendizaje interactiva registra la evolucin del usuario para poder volver fcilmente al ltimo ejercicio realizado. Hay unas pruebas al final de cada leccin que sirven de ayuda para comprobar los conocimientos adquiridos en la unidad.
xii
Nota: Para poder utilizar esta gua de aprendizaje, necesitar un navegador que admita marcos, Java y Javascript. Tambin necesitar una herramienta de extraccin de archivos, como WinZip, que pueda tratar nombres largos de archivos. Tambin puede encontrar la informacin ms reciente sobre VA RPG y CODE/400 en la siguiente fuente en lnea: La pgina de presentacin de VisualAge RPG y CODE/400 http://www.ibm.com/software/ad/varpg/
xiii
v Acceda a los manuales desde el men Inicio. Seleccione Programas VisualAge RPG y CODE400. A continuacin, seleccione Informacin de VARPG y CODE400.
xiv
xv
xvi
xvii
v La posibilidad de utilizar literales hexadecimales en campos enteros y enteros sin signo en operaciones de inicializacin y de formato libre, como por ejemplo EVAL, IF, etc. La siguiente tabla resume los elementos nuevos y modificados del lenguaje, basndose en la parte afectada del lenguaje.
Tabla 1. Elementos del lenguaje modificados desde la V3.2.1
Unidad del lenguaje Elemento Descripcin Ahora pueden inicializarse todos los subcampos de una estructura de datos descrita externamente con los valores por omisin especificados en las DDS. El valor especial *NEXT indica que el subcampo se colocar en la siguiente posicin disponible dentro del campo solapado. El nuevo parmetro OPTIONS(*RIGHTADJ), que se especifica en un parmetro de valor o constante de un prototipo de funcin, indica que el valor de tipo carcter, grfico o UCS-2 que se pasa como parmetro se ajustar por la derecha antes de pasarse a la llamada del procedimiento. Se han aadido a la lista de valores permitidos para tipos de datos internos, para dar soporte a los datos enteros y sin signo de 1 y 8 bytes. Se aade a la lista de tipos de datos internos permitidos en las especificaciones de definicin. El juego de caracteres UCS-2 (Unicode) permite codificar los caracteres de muchos idiomas escritos. El campo es un campo de tipo carcter cuyos caracteres tienen una longitud de dos bytes. Se aade el formato UCS-2 a la lista de formatos de datos permitidos en las especificaciones de entrada y salida de archivos descritos por el programa.
OPTIONS(*RIGHTADJ)
En los tipos de datos I y U Especificacin de definicin se permiten 3 y 20 dgitos posiciones 33-39 (Hasta posicin/Longitud) Tipo de datos internos C (formato UCS-2 de longitud fija o variable)
Formato de datos
Palabras clave de CCSID(*GRAPH: *IGNORE | Establece el CCSID grfico por omisin la especificacin de *SRC | nmero) del mdulo. Este valor se utiliza en los control literales, en los datos de tiempo de compilacin y en los campos y definiciones de entrada y salida descritos por el programa. El valor por omisin es *IGNORE.
xviii
INTPREC(10 | 20)
Cdigos de operacin
EVALR
FOR
ENDFOR
LEAVESR
xix
Esta publicacin presenta numerosas diferencias respecto a la versin anterior. La mayor parte de los cambios estn relacionados con las mejoras que se han efectuado desde el ltimo release; otros reflejan correcciones tcnicas menores. Para facilitarle la utilizacin de este manual, las mejoras y los cambios tcnicos se indican con una barra vertical (|).
xx
Nombres simblicos
Un nombre simblico identifica datos especficos de forma exclusiva en un programa o procedimiento. Su funcin es permitir al usuario acceder a dichos datos. Las normas siguientes se aplican a todos los nombres simblicos: v El primer carcter del nombre debe ser alfabtico, $ o @ v Los caracteres restantes deben ser alfabticos, numricos o el signo de subrayado (_) v El nombre debe estar ajustado por la izquierda en la entrada de la hoja de especificaciones, excepto en los campos que permiten que el nombre est en formato libre (la especificacin de definicin, los campos de palabra clave y el campo de factor 2 ampliado) v No puede ser una palabra reservada v Un nombre simblico puede tener entre 1 y 4096 caracteres. Los lmites prcticos estn determinados por el tamao de la entrada utilizada para definir el nombre. En la entrada Nombre de la especificacin de definicin o procedimiento se puede especificar un nombre con una longitud mxima de 15 caracteres. Para nombres con ms de 15 caracteres, utilice una especificacin de continuacin. v Un nombre simblico debe ser nico dentro del procedimiento en el que se define. En la Tabla 3 se listan los nombres simblicos y las restricciones adicionales.
Tabla 3. Restricciones para nombres simblicos
Matrices Nombres de compilacin condicional Un nombre de matriz no puede empezar con las letras TAB. Los nombres simblicos utilizados para la compilacin condicional no tienen relacin con otros nombres simblicos. Los nombres para la compilacin condicional pueden tener 50 caracteres. Una estructura de datos slo se puede definir una vez. El mismo nombre EXCEPT se puede asignar a ms de un registro de salida de excepcin.
Listas de campos de clave Etiquetas Constantes con nombre Listas de parmetros Nombres de prototipo Nombres de registro Subrutinas
Tablas
*JIS *JUL
*USA *AMD
*HMS
Para obtener ms informacin acerca de los formatos de fecha, consulte el apartado DATFMT(fmt{separador}) en la pgina 205.
Expresiones
La palabra especial NOT se puede utilizar con las expresiones. Para obtener ms informacin acerca de las expresiones, consulte el apartado Captulo 24. Expresiones en la pgina 351.
Literales implcitos
Las constantes figurativas son literales implcitos que pueden especificarse sin hacer referencia a la longitud. Para obtener ms informacin acerca de las constantes figurativas, consulte el apartado Constantes figurativas en la pgina 142.
*ALLXx1.. *ALLGK1K2 *ALLX.. *ABORT *BLACK *BLANK *BLANKS *BLUE *BROWN *CANCEL *CYAN *DARKBLUE *DARKCYAN *DARKGREEN *DARKGRAY *DARKPINK *DARKRED *ENTER *GREEN *HALT *HIVAL *INFO *IGNORE *LOVAL *NOBUTTON *NULL *OFF *ON *OK *PALEGRAY *PINK *RED *RETRY *WARN *WHITE *YELLOW *YESBUTTON *ZERO *ZEROS
Colocacin de campos
*PLACE permite la colocacin repetitiva de campos en un registro de salida. Si desea ms informacin, consulte el apartado *PLACE en la pgina 295.
Posicin de archivo
*START y *END cambian la posicin de un archivo de base de datos de AS/400. Si el archivo no es por clave, *START y *END establecen la posicin al principio y al final del archivo respectivamente. Si se trata de un archivo por clave, *START y *END establecen la posicin al principio y al final de la va de acceso por clave, respectivamente.
v Cuando un campo PAGE slo est indicado en las especificaciones de salida, se trata como un campo numrico de cuatro dgitos sin posiciones decimales. Puede utilizar las palabras PAGE de diversas formas: v Para comenzar por un nmero de pgina que no sea el 1, establezca el valor del campo PAGE en el nmero anterior al que desea. v Para volver a iniciar la numeracin de pginas en cualquier punto de un trabajo: Especifique un espacio en blanco detrs (posicin 45 de las especificaciones de salida) Especifique el campo PAGE como el campo de resultado de una operacin en las especificaciones de clculo Especifique un indicador de salida en el campo de salida (consulte la Figura 2). Cuando el indicador de salida est activado, el campo PAGE se restablece a 1. Los indicadores no se pueden utilizar para controlar la impresin de un campo PAGE, ya que ste siempre se graba. Especifique el campo PAGE como campo de entrada (consulte la Figura 1).
*...1....+....2....+....3....+....4....+....5....+....6....+....7... IFilename++Sq..RiPos1+NCCPos2+NCCPos3+NCC................................ I........................Fmt+SPFrom+To+++DcField+++++++++....FrPlMnZr.... IINPUT 50 1 CP I 2 5 0PAGE
v Los campos de fecha de usuario no se pueden modificar. Esto significa que no se pueden utilizar: En el campo de resultado de los clculos Como factor 1 de operaciones PARM Como ndice de factor 2 de operaciones LOOKUP Con un espacio en blanco detrs en las especificaciones de salida Como campos de entrada v Los campos de fecha de usuario UMONTH, *MONTH, UDAY, *DAY, UYEAR y *YEAR no se pueden editar mediante el cdigo de edicin Y en la posicin 44 de las especificaciones de salida. Puede utilizar las palabras de fecha de usuario de diversas maneras:
Cdigos de operacin que utilizan campos numricos Las palabras especiales de fecha de usuario se pueden utilizar en el factor 1 2 de las especificaciones de clculo para los cdigos de operacin que utilizan campos numricos. Es posible editar UDATE y *DATE cuando se graban si se especifica el cdigo de edicin & en la posicin 44 de la especificacin de salida. La palabra clave DATEDIT en la especificacin de control determina el formato y el carcter separador que se insertar.
Impresin de campos de fecha de dos Para imprimir un campo de fecha de dos posiciones, posiciones especifique UMONTH, *MONTH UDAY, *DAY y UYEAR en las especificaciones de salida. Impresin de campos de fecha de cuatro posiciones Para imprimir un campo de fecha de cuatro posiciones, especifique UMONTH, *MONTH UDAY, *DAY y UYEAR en las especificaciones de salida.
Impresin de campos de fecha de seis Para imprimir un campo de fecha de seis posiciones, posiciones especifique UDATE en las especificaciones de salida. Se pueden utilizar tres formatos distintos: Mes/da/ao, Ao/mes/da y Da/mes/ao. La palabra clave DATEDIT en la especificacin de control determina el formato. Impresin de campos de fecha de ocho posiciones Para imprimir un campo de fecha de ocho posiciones, especifique *DATE en las especificaciones de salida. Para el ao se utilizan cuatro dgitos. Se pueden utilizar tres formatos distintos: Mes/da/ao, Ao/mes/da y Da/mes/ao. La palabra clave DATEDIT en la especificacin de control determina el formato. Para imprimir el da solamente, especifique UDAY o *DAY en las especificaciones de salida. Para imprimir el mes solamente, especifique UMONTH o *MONTH en las especificaciones de salida. Para imprimir el ao solamente, especifique YEAR o *YEAR en las especificaciones de salida.
Impresin del ao
v Si se especifica una biblioteca, tambin debe especificarse un nombre de archivo. 53-80 81-100 Blanco Comentarios
A continuacin, se facilitan ejemplos de la sentencia /COPY para copiar archivos AS/400: v Para copiar el miembro MBR1 del archivo fuente QRPGLESRC, entre la sentencia siguiente. Observe que se utiliza la lista de bibliotecas actual para buscar el archivo QRPGLESRC:
C/COPY *REMOTE MBR1
v Para copiar el miembro MBR1 del archivo fuente SRCFIL, entre la sentencia siguiente. Observe que se utiliza la lista de bibliotecas actual para buscar el archivo SRCFIL:
I/COPY *REMOTE SRCFIL,MBR1
v Para copiar el miembro MBR1 del archivo fuente SRCFIL de la biblioteca SRCLIB, entre la sentencia siguiente:
O/COPY *REMOTE SRCLIB/SRCFIL,MBR1
v Para copiar el miembro mbr1 del archivo srcfil de la biblioteca srclib, entre la sentencia siguiente:
O/COPY *REMOTE "srclib"/"srcfil","mbr1"
10
Definicin de condiciones
Los nombres de condicin pueden aadirse o eliminarse de la lista de condiciones definidas actualmente utilizando las directivas de definicin de condicin /DEFINE y /UNDEFINE.
La directiva /DEFINE aade un nombre de condicin a la lista de condiciones ya definidas. Una directiva /IF DEFINED(nombre de condicin) posterior sera verdadera. Una directiva /IF NOT DEFINED(nombre de condicin) posterior sera falsa.
La directiva /UNDEFINE elimina un nombre de condicin de la lista de condiciones ya definidas. Una directiva /IF DEFINED(nombre de condicin) posterior sera falsa. Una directiva /IF NOT DEFINED(nombre de condicin) posterior sera verdadera.
11
Nota: Las condiciones especificadas en el parmetro DEFINE se tendrn en cuenta para la definicin al procesar las directivas /IF y /ELSEIF. Estas condiciones pueden eliminarse utilizando la directiva /UNDEFINE.
Expresiones condicionales
Una expresin condicional presenta una de las formas siguientes: v DEFINED(nombre de condicin) v NOT DEFINED(nombre de condicin) La expresin de condicin tiene formato libre pero no puede continuar en la lnea siguiente.
Comprobacin de condiciones
Las condiciones se comprueban utilizando los grupos /IF que constan de una directiva /IF, seguida de cero o ms directivas /ELSEIF, seguidas opcionalmente por una directiva /ELSE, seguida de una directiva /ENDIF. Son vlidas todas las lneas fuente entre las directivas de un grupo /IF excepto los datos de tiempo de compilacin. Esto incluye los grupos /IF jerarquizados. Nota: No hay un lmite prctico para el nivel de jerarquizacin de los grupos /IF.
Si la expresin de la condicin es verdadera, se seleccionan las lneas fuente que van a continuacin de la directiva /IF para que las lea el compilador. De lo contrario, se excluyen las lneas existentes hasta la prxima condicin /ELSEIF, /ELSE o /ENDIF del mismo grupo /IF.
Si no se cumpli la condicin /IF o /ELSEIF anterior y la expresin de la condicin es verdadera, se seleccionan para lectura las lneas fuente que van a
12
continuacin de la directiva /ELSEIF. De lo contrario, se excluyen las lneas existentes hasta que se encuentra la prxima condicin /ELSEIF, /ELSE o /ENDIF del mismo grupo /IF.
Si no se cumpli la condicin /IF o /ELSEIF anterior, las lneas fuente se seleccionan hasta la prxima condicin /ENDIF. Si se cumpli la condicin /IF o /ELSEIF anterior, se excluyen las lneas fuente hasta la prxima condicin /ENDIF.
Despus de la directiva /ENDIF, si la directiva /IF correspondiente era una lnea seleccionada, las lneas se seleccionan de forma incondicional. De lo contrario, el grupo /IF no estaba seleccionado, por lo que las lneas siguen sin ser seleccionadas.
v /ELSEIF, y /ELSE no son vlidas fuera de un grupo /IF. v Un grupo /IF puede contener al menos una directiva /ELSE. Una directiva /ELSEIF no puede ir a continuacin de una directiva /ELSE. v /ENDIF no es vlida fuera de un grupo /IF, /ELSEIF o /ELSE. v A cada directiva /IF debe corresponderle una directiva /ENDIF posterior. v Todas las directivas asociadas a cualquier grupo /IF deben estar en el mismo archivo fuente. No es vlido tener la directiva /IF en un archivo y la directiva /ENDIF correspondiente en otro, incluso aunque el segundo archivo est en una directiva /COPY jerarquizada. Sin embargo, todo un grupo /IF puede estar en una directiva /COPY jerarquizada.
La directiva /EOF
La directiva /EOF indica al compilador que debe ignorar el resto de lneas fuente del miembro fuente actual.
13
La directiva /EOF finalizar cualquier grupo /IF activo que se haya activado durante la lectura del miembro fuente actual. Si la directiva /EOF estaba en un archivo /COPY, las condiciones que estaban activas cuando se ley la directiva /COPY seguirn estndolo. Nota: Si las lneas excluidas se estn imprimiendo en el listado, se continuar la lectura y el listado de las lneas fuente despus de /EOF, pero el compilador ignorar completamente el contenido de las lneas. Nunca se emitirn mensajes de diagnstico despus de /EOF. Al utilizar la directiva /EOF se mejora el rendimiento del tiempo de compilacin cuando todo un miembro /COPY se utiliza una sola vez, pero puede copiarse varias veces. (Esto no es cierto si se imprimen las lneas excluidas).
14
13 14-16
Blanco Valor entero positivo comprendido entre el 1 y el 112 que define el nmero de lneas correspondiente al interlineado. Si se especifica un nmero mayor que 112, se utiliza 112 como valor de /SPACE. Si el nmero es mayor que la cantidad de lneas que quedan en la pgina actual, las especificaciones siguientes comienzan en la pgina siguiente. Blanco Comentarios
17-49 50-100
15
16
Captulo 3. Indicadores
Un indicador en un campo de caracteres de un byte que contiene un 1 (activado) o un 0 (desactivado). Se suelen utilizar para indicar el resultado de una operacin o para establecer condiciones en el proceso de una operacin. Los indicadores se definen en entradas en la especificacin. Las posiciones de la especificacin en las que se define un indicador determinan cmo se utiliza el indicador. Un indicador que se ha definido se puede utilizar para condicionar las operaciones de clculo y de salida. El formato de indicador puede especificarse en las especificaciones de definicin con el fin de definir las variables de indicador. Si desea obtener una descripcin de cmo definir datos de tipo carcter en el formato de indicador, consulte Tipo de datos carcter en la pgina 102 y Posicin 40 (Tipo de datos internos) en la pgina 235. El estado de la mayora de indicadores se puede modificar mediante operaciones de clculo. Todos los indicadores se pueden activar con el cdigo de operacin SETON y desactivar con SETOFF. En este apartado se da la descripcin de lo siguiente: v Los indicadores definidos en las especificaciones VisualAge RPG (indicadores de identificacin de registro, de campo y resultantes). v El indicador de ltimo Registro (LR) v La asignacin de indicadores de relacin de registros de campos v El condicionamiento de los clculos v La utilizacin de indicadores en las expresiones v El condicionamiento de la salida v Los indicadores a los que se hace referencia como a los datos.
17
En el caso de un archivo descrito externamente, el indicador de identificacin de registro es opcional. Si se especifica, sigue las mismas reglas que en el caso de un archivo descrito por programa. Cuando se selecciona un tipo de registro para procesarlo, se activa el indicador de identificacin de registro correspondiente. Los dems indicadores de identificacin de registro se desactivan excepto cuando se utiliza un cdigo de operacin de archivo para recuperar registros de un archivo. El indicador de identificacin de registro se activa despus de seleccionar el registro, pero antes de que los campos de entrada se desplacen al rea de entrada. Se pueden desactivar en cualquier momento. Si se utiliza un cdigo de operacin de archivo en las especificaciones de clculo para recuperar un registro, el indicador de identificacin de registro se activa en cuanto el registro se recupera del archivo. Puede haber varios indicadores de identificacin de registro para el mismo archivo, as como indicadores de registro no encontrado, activados al mismo tiempo si se emiten varias operaciones sobre el mismo archivo.
Indicadores de campo
Los indicadores de campo se definen mediante una entrada en las posiciones 69 y 70, 71 y 72 73 y 74 de las especificaciones de entrada. Los indicadores de campos son los indicadores generales 01-99. Un indicador de campo se puede utilizar para determinar si el campo o el elemento de matriz especificado es mayor que cero, menor que cero, cero o un espacio en blanco: v Las posiciones 69 a 72 son vlidas para los campos numricos
18
v Las posiciones 73 a 74 son vlidas para los campos numricos o de caracteres v Un indicador especificado en las posiciones 69 y 70 se activa cuando el campo de entrada numrico es mayor que cero v Un indicador especificado en las posiciones 71 y 72 se activa cuando el campo de entrada numrico es menor que cero v Un indicador especificado en las posiciones 73 y 74 se activa cuando el campo de entrada numrico es cero o cuando el campo de entrada de caracteres es un espacio en blanco. Los indicadores de campo se pueden utilizar para condicionar las operaciones de clculo o de salida. Un indicador de campo se activa cuando los datos del campo o elemento de matriz se extrae del registro y la condicin a la que representa se cumple en el registro de entrada. Permanece activo hasta que se lee otro registro del mismo tipo y la condicin a la que representa no se cumple en el registro de entrada o hasta que el indicador se desactiva como resultado de un clculo.
Indicadores resultantes
Un indicador resultante est definido por una entrada en las posiciones 71 a 76 de las especificaciones de clculo. La finalidad de los indicadores resultantes depende del cdigo de operacin especificado en las posiciones 26 a 35. Consulte cada cdigo de operacin en Captulo 25. Cdigos de operacin para obtener una descripcin de la finalidad de los indicadores resultantes. Por ejemplo, se pueden utilizar para comprobar el campo de resultado despus de una operacin
Captulo 3. Indicadores
19
aritmtica, para identificar una condicin de registro no encontrado, para indicar una condicin de excepcin/error para una operacin de archivo o para indicar una condicin de fin de archivo. Los indicadores resultantes son 01-99 y LR. Los indicadores resultantes se pueden especificar en tres lugares (posiciones 71-72, 73-74 y 75-76) de las especificaciones de clculo. Las posiciones en las que se definen los indicadores resultantes determinan la condicin que se ha de comprobar. En la mayora de casos, cuando se procesa un clculo, los indicadores resultantes se desactivan y, si la condicin especificada por un indicador resultante se cumple, dicho indicador se activa. Sin embargo, hay algunas excepciones a esta regla, como LOOKUP (Buscar un elemento en tabla o matriz) en la pgina 466, SETOFF (Desactivar indicador) en la pgina 537 y SETON (Activar indicador) en la pgina 537. Un indicador resultante se puede utilizar como indicador de condicionamiento en la misma lnea de clculo o en otros clculos u operaciones de salida. Cuando se utiliza en la misma lnea, el valor anterior del indicador determina si el clculo se procesa o no. Si se procesa, el campo de resultado se comprueba y se determina el valor actual del indicador (vase la Figura 3).
20
Utilizacin de indicadores
Los indicadores definidos como de identificacin de registro, de campo, resultantes, *IN, *IN(xx) o *INxx se puede utilizar para condicionar archivos, operaciones de clculo u operaciones de salida. Un indicador debe definirse antes de que se utilice como indicador de condicionamiento. Su estado /(activado o desactivado) no resulta afectado cuando se utiliza como indicador de condicionamiento. El estado se puede cambiar definiendo el indicador de modo que represente a una condicin determinada.
Captulo 3. Indicadores
21
*...1....+....2....+....3....+....4....+....5....+....6....+....7... IFilename++Sq..RiPos1+NCCPos2+NCCPos3+NCC................................ I........................Fmt+SPFrom+To+++DcField+++++++++....FrPlMnZr.... IREPORT AA 14 1 C5 I OR 16 1 C6 I 20 30 FLDB I 2 10 FLDA 07 I* I* El indicador 07 se ha especificado en otro punto del programa. I* I 40 50 FLDC 14 I 60 70 FLDD 16
El archivo de la Figura 4 contiene dos tipos distintos de registros: uno est identificado mediante un 5 en la posicin 1 y el otro mediante un 6 en la misma posicin. El campo FLDC est relacionado mediante el indicador de identificacin de registro 14 con el tipo de registro identificado por un 5 en la posicin 1. El campo FLDD est relacionado con el tipo de registro que tiene un 6 en la posicin 1 mediante el indicador de identificacin de registro 16. Ello significa que FLDC se encuentra solamente en un tipo de registro (el identificado mediante un 5 en la posicin 1) y que FLDD slo se encuentra en el otro tipo. FLDA est condicionado por el indicador 07, que estaba definido previamente en otro lugar del programa. FLDB se encuentra en ambos tipos de registro, ya que no est relacionado con ninguno de ellos mediante un indicador de identificacin de registro.
Posiciones 7 y 8
Especifique espacios en blanco, SR, AN u OR en las posiciones 7 y 8 de las especificaciones de clculo. Si dichas posiciones estn en blanco, el clculo se procesa cuando lo indique la lgica del programa mediante una sentencia de una subrutina o una operacin declarativa.
Posiciones 9-11
Para especificar indicadores que controlen las condiciones bajo las cuales se procesar una operacin, especifique las posiciones 9 a 11 en las especificaciones de clculo. Si se especifica N en la posicin 9, debe comprobarse el indicador para el valor desactivado (0). Se pueden especificar 01-99 o LR para las posiciones 10 a 11. Los indicadores que se utilicen en las posiciones de 9 a 11 deben estar definidos anteriormente como uno de los tipos de indicadores siguientes: v Indicadores de identificacin de registro (especificaciones de entrada, posiciones 21 y 22) v Indicadores de campo (especificaciones de entrada, posiciones 69 a 74) v Indicadores resultantes (especificaciones de clculo, posiciones 71 a 76) v Matriz *IN, elemento de matriz *IN(xx) o campo *INxx. Consulte el apartado Indicadores referidos como datos en la pgina 25 para obtener una descripcin de cmo se define un indicador cuando se utiliza con una de estas palabras reservadas.
22
Si es necesario que el indicador est desactivado para condicionar la operacin, coloque una N en la posicin 9. Los indicadores de las lneas AND/OR agrupadas deben ser exactamente iguales que los especificados antes de efectuar la operacin. En la Figura 5 y en la Figura 6 se muestran ejemplos de indicadores de condicionamiento.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... IFilename++Sq..RiPos1NCCPos2NCCPos3NCC.PFromTo++DField+L1M1FrPlMnZr...* I........................Fmt+SPFrom+To+++DcField+++++++++....FrPlMnZr.... I* I* Los indicadores de campo se pueden utilizar para condicionar opeI* raciones. Suponga que el programa ha de calcular el sueldo semanal I* incluidas las horas extras. El campo de horas extras se comprueba I* para determinar si se ha entrado la cantidad de horas. Si el I* empleado ha trabajado horas extras, el campo es positivo y el I* indicador 10 se activa. En todos los casos se calcula el sueldo I* semanal normal. Sin embargo, la parte correspondiente a las I* horas extras slo se suma si el indicador 10 est activado. I* ITIME AB 01 I 1 7 EMPLNO I 8 10 0OVERTM 10 I 15 20 2RATE I 21 25 2RATEOT CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C* C* El indicador de campo 10 se ha asignado en las especificaciones de C* entrada. Aqu se usa para condicionar las operaciones de clculo. C* C EVAL (H) PAY = RATE * 40 C 10 EVAL (H) PAY = PAY + (OVERTM * RATEOT)
Captulo 3. Indicadores
23
En el apartado Captulo 24. Expresiones en la pgina 351 y EVAL (Evaluar expresin) en la pgina 446 hallar ms informacin.
24
puede condicionar con ms de tres indicadores utilizando la operacin EVAL en los clculos. En la Figura 8 puede ver un ejemplo.
CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C* El indicador 20 slo se activa si los indicadores 10, 12, 14, 16 y 18 C* estn activados. C EVAL *IN20 = *IN10 AND *IN12 AND *IN14 C AND *IN16 AND *IN18 C EXCPT OFilename++EAddN01N02N03Excnam++++....................................... O..............N01N02N03Field+++++++++YB.End++PConstant/editword/DTformat O* OUTFIELD est condicionado por el indicador 20, lo que significa O* que est condicionado por todos los indicadores de la operacin O* EVAL. OPRINTER E O 20 OUTFIELD
*IN
La matriz *IN es una matriz predefinida de 99 elementos de caracteres de una posicin que representa a los indicadores 01 a 99. Los elementos de esta matriz deben contener solamente los valores de carcter '0' (cero) o '1' (uno). La especificacin de la matriz *IN o del elemento de matriz de ndice variable *IN(xx) como campo de un registro de entrada, como campo de resultado o como factor 1 de una operacin PARM define los indicadores 01 a 99 para utilizarlos en el programa. Las operaciones o referencias vlidas para una matriz de elementos de un solo carcter son vlidas con la matriz *IN, con la excepcin de que la matriz *IN no se puede especificar como subcampo en una estructura de datos ni como campo de resultado de una operacin PARM.
*INxx
El campo *INxx es un campo predefinido de caracteres de una posicin; xx representa cualquier indicador. La especificacin del campo *INxx o del elemento de matriz de ndice fijo *IN(n) (siendo n = 1 a 99) como campo en un registro de entrada, como campo de resultado o como factor 1 de una operacin PARM define el indicador correspondiente para su utilizacin en el programa. Especifique *INxx siempre que un campo de caracteres de una posicin sea vlido. *INxx no se puede especificar como subcampo de una estructura de datos, como campo de resultado de una operacin PARM ni en una operacin SORTA.
25
v Si se traslada un carcter '0' (cero) u *OFF a uno de estos campos, el indicador correspondiente se desactiva. v Si se traslada un carcter '1' (uno) u *ON a uno de estos campos, el indicador correspondiente se activa. v No debe trasladarse ningn valor, excepto '0' (cero) o '1' (uno), a *INxx. Vea en la Figura 9 un ejemplo de los indicadores a los que se hace referencia como a datos.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. C* C* Cuando se llama a este programa, se pasa un solo parmetro para C* controlar parte de la lgica del programa. Este parmetro define C* el valor del indicador 50. Debe pasarse con un valor de C* carcter de 1 0. C* C *ENTRY PLIST C *IN50 PARM SWITCH 1 C* C* C* La subrutina SUB1 utiliza los indicadores 61 a 68. Antes de C* procesar la subrutina, el estado de estos indicadores utilizados C* en el programa principal (se presupone que los indicadores estn C* desactivados al principio de la subrutina). Una vez que la subrutina C* se haya procesado, los indicadores vuelven a tomar su estado original. C* C* C MOVEA *IN(61) SAV8 8 C EXSR SUB1 C MOVEA SAV8 *IN(61) C* C* Un campo de cdigo (CODE) contiene un valor numrico de 1 a 5 y se C* usa para establecer los indicadores 71 a 75. Los cinco indicadores C* estn desactivados. El campo X se calcula como la suma de 70 ms el C* campo CODE. Despus se utiliza como ndice de la matriz *IN. C* A continuacin se utilizarn distintas subrutinas segn el estado C* de los indicadores 71 a 75. C* C MOVEA '00000' *IN(71) C 70 ADD CODE X 3 0 C MOVE *ON *IN(X) C 71 EXSR CODE1 C 72 EXSR CODE2 C 73 EXSR CODE3 C 74 EXSR CODE4 C 75 EXSR CODE5
26
Resumen de indicadores
Tabla 4. Cundo se activan y desactivan los indicadores
Tipo de indicador De identificacin de registro De indicador de campo Se activa Inmediatamente de leer el registro Se desactiva Lo desactiva el programador
Mediante un espacio en blanco o Antes de que el estado de este un cero en los campos campo se vuelva a comprobar. especificados, mediante un signo ms o un signo menos en el campo especificado. Cuando el clculo se procesa y la condicin a la que representa el indicador se cumple. La vez siguiente que se procesa un clculo para el cual se ha especificado el mismo indicador como indicador resultante y la condicin especificada no se cumple. Lo desactiva el programador.
Resultante
LR
Lo desactiva el programador.
Captulo 3. Indicadores
27
28
29
2. Se abren los archivos y se cargan las estructuras de datos, las tablas y las matrices de pre-ejecucin. 3. En los parmetros *ENTRY PLIST, el campo del resultado se mueve al factor 1. 4. Si se especifica una subrutina de inicializacin de usuario (*INZSR), sta se ejecuta. La mayor parte de operaciones relacionadas con los componentes y eventos de los componentes lgicos no funcionarn en este momento puesto que el entorno de ejecucin del componente lgico no ha sido inicializado. 5. En los parmetros *ENTRY PLIST, el factor 2 se copia en el campo del resultado. 6. Se guardan las estructuras de datos y las variables que la operacin RESET utilizar. 7. Se inicializa el entorno de ejecucin del componente lgico. 8. Si las subrutinas de accin han sido grabadas para ellos, se maneja un conjunto inicial de eventos en el conjunto inicial de ventanas y sus componentes. Por ejemplo, cualquier ventana y sus componentes que tengan atributos de arranque que especifiquen Abrir inmediatamente producen un evento CREATE. Todos los eventos generados durante la ejecucin de dichas subrutinas de accin tambin invocan a cualquier subrutina de accin escrita para ellos en ese momento. Una vez completada la inicializacin de un componente, la aplicacin puede disponer de los componentes de los componentes lgicos. El usuario final puede generar eventos para invocar a la subrutina de accin en cualquier de los componentes lgicos abiertos ahora. En algunos casos, durante la inicializacin de la aplicacin, no se permiten algunos cdigos de operacin, atributos y el manejador de excepciones por omisin. Por ejemplo, no puede obtener un atributo de un componente antes de que el componente haya sido creado. Para obtener ms informacin, consulte la Tabla 5 en la pgina 32, la Tabla 6 en la pgina 34, la Tabla 7 en la pgina 34 y la Tabla 8 en la pgina 36.
Terminacin normal
Un componente lgico termina de forma normal en las siguientes situaciones: v Si LR est activado al alcanzar ENDACT en la subrutina de accin de raz o si se ejecuta RETURN desde la subrutina de accin de raz. La subrutina de accin de raz es la subrutina de la parte inferior (o primera) de cualquier subrutina de accin jerarquizada. Las subrutinas de accin jerarquizadas se producen cuando un evento invoca a una subrutina de accin nueva mientras se ejecuta otra subrutina de accin.
30
Por ejemplo, la subrutina de accin BUTTON+CLICK+WINDOW1 contiene la operacin window2 SHOWWIN. Esto causa un evento CREATE que invoca a la subrutina de accin WINDOW2+CREATE+WINDOW2. Si se produce otro evento mientras se maneja el evento CREATE, (por ejemplo, WINDOWX SETATR 1 FOCUS), entonces se suspende la subrutina de accin WINDOW2+CREATE+WINDOW2 y se invoca la subrutina de accin WINDOWX+FOCUS+WINDOWX. La pila de llamadas incluye las siguientes subrutinas de accin jerarquizadas:
1. 2. 3. FIELD1+FOCUS+WINDOWX WINDOW2+CREATE+WINDOW2 BUTTON+CLICK+WINDOW1 (subrutina de accin raz)
no se comprueba hasta que: La subrutina de accin WINDOWX+FOCUS+WINDOWX finaliza La subrutina de accin WINDOW2+CREATE+WINDOW2 finaliza La operacin ENDACT o RETURN se realiza para la subrutina de accin BUTTON+CLICK+WINDOW1. v Si STOP se realiza en el componente lgico. Para obtener ms informacin, consulte el apartado STOP (Detener un componente lgico) en la pgina 542. v Si *PSSR se ejecuta y finaliza de una de las siguientes maneras: ENDSR *DEFAULT o un nombre de campo equivalente. El indicador LR est activado al final de la subrutina de accin de raz. ENDSR *NODEFAULT o un nombre de campo equivalente. El indicador LR est activado al final de la subrutina de accin de raz. Para obtener ms informacin consulte los apartados ENDSR (Fin de subrutina de usuario) en la pgina 445 y Excepciones/errores de componente lgico en la pgina 55. v Si el manejador de excepciones por omisin presenta la ventana de informacin de mensajes y se realiza una de las siguientes opciones: Realizar el proceso por omisin y el indicador LR est activado al final de la subrutina de accin de raz No realizar el proceso por omisin y el indicador LR est activado al final de la subrutina de accin de raz Para obtener ms informacin, consulte el apartado Excepciones/errores de componente lgico en la pgina 55. Esto es lo que ocurre en una terminacin normal: v Si *TERMSR existe, se ejecuta v Se escriben los archivos, las tablas y matrices de pre-ejecucin y las estructuras de datos de las reas de datos v Se cierran todos los archivos v Se desbloquean todas las reas de datos *TERMSR es una subrutina escrita por el usuario en la que puede producirse cualquier ejecucin de cdigo final. Cuando *TERMSR es invocado, ninguna subrutina de accin est activa y el componente lgico actual ha sido marcado como que se est terminando. Esto significa que hay pocas operaciones de interfaz grfica de usuario permitidas. Consulte la Tabla 5 en la pgina 32, la Tabla 6 en la pgina 34, la Tabla 7 en la pgina 34 y la Tabla 8 en la pgina 36. Consulte el apartado Cdigos de estado de componente lgico en la pgina 55 para obtener una lista de los valores de estado en la terminacin normal de componentes lgicos.
LR 1. 2. 3.
31
Terminacin anormal
Un componente lgico termina de forma anormal si se produce una de las siguientes situaciones: v El *PSSR se ejecuta y finaliza de una de las siguientes maneras: ENDSR *ENDCOMP, ENDSR *CANCL o un nombre de campo equivalente ENDSR *ENDAPPL o un nombre de campo equivalente v El manejador de excepciones por omisin presente la ventana de informacin de mensajes y se elige una de las siguientes opciones: Terminar el componente lgico Terminar la aplicacin v Un condicin anormal se produce en la GUI durante la ejecucin. Esto es lo que ocurre en una terminacin anormal: v Se cierran todos los archivos v Se desbloquean todas las reas de datos. Nota: *TERMSR no es llamado para la terminacin anormal.
32
Tabla 5. Restricciones de cdigos de operacin durante la inicializacin, la terminacin y el manejo de eventos (continuacin)
Operacin de GUI SHOWWIN Inicializacin (*INZSR) No permitida Terminacin (*TERMSR) No permitida Manejo de eventos No se puede ejecutar el mismo cdigo de operacin diversas veces desde dentro de la misma subrutina de accin o subrutina de accin jerarquizada. Por ejemplo, una subrutina de accin contiene: SHOWWIN 'WIN1' CLSWIN 'WIN1' SHOWWIN 'WIN1' En este caso, el segundo SHOWWIN falla. START Sin restricciones Sin restricciones No se puede ejecutar el mismo cdigo de operacin diversas veces desde dentro de la misma subrutina de accin o subrutina de accin jerarquizada. Por ejemplo, una subrutina de accin contiene: START 'COMP2' STOP 'COMP2' STOP 'COMP2' En este caso, el segundo STOP falla. STOP self No permitida No permitida No se puede finalizar un componente lgico desde una subrutina de accin jerarquizada. No se puede finalizar un componente lgico desde una subrutina de accin jerarquizada.
STOP other
33
Tabla 7. Restricciones del manejador de excepciones por omisin durante la inicializacin, terminacin y el manejo de eventos
Atributo Ventana de informacin de mensajes, Realizar el proceso por omisin Inicializacin (*INZSR) Sin restricciones Terminacin (*TERMSR) Se termina el componente lgico y se visualiza una ventana de informacin asncrona. Manejo de eventos La ventana de informacin que se visualiza interfiere con cualquier evento que haya sido enviado. Si esta operacin se realiza desde la misma subrutina o subrutina de accin jerarquizada despus de efectuar una operacin CLSWIN o STOP (por ejemplo, los eventos Close Window o Close Component todava estn pendientes), esta operacin recibe los eventos pendientes y no se llevan a cabo.
34
Tabla 7. Restricciones del manejador de excepciones por omisin durante la inicializacin, terminacin y el manejo de eventos (continuacin)
Atributo Ventana de informacin de mensajes, No realizar proceso por omisin Inicializacin (*INZSR) Sin restricciones Terminacin (*TERMSR) Se termina el componente lgico y se visualiza una ventana de informacin asncrona. Manejo de eventos La ventana de informacin que se visualiza interfiere con cualquier evento que haya sido enviado. Si esta operacin se realiza desde la misma subrutina o subrutina de accin jerarquizada despus de efectuar una operacin CLSWIN o STOP (por ejemplo, los eventos Close Window o Close Component todava estn pendientes), esta operacin recibe los eventos pendientes y no se llevan a cabo. No se puede finalizar un componente lgico desde una subrutina de accin jerarquizada. La ventana de informacin que se visualiza interfiere con cualquier evento que haya sido enviado. Si esta operacin se realiza desde la misma subrutina o subrutina de accin jerarquizada despus de efectuar una operacin CLSWIN o STOP (por ejemplo, los eventos Close Window o Close Component todava estn pendientes), esta operacin recibe los eventos pendientes y no se llevan a cabo.
Sin restricciones
35
Tabla 7. Restricciones del manejador de excepciones por omisin durante la inicializacin, terminacin y el manejo de eventos (continuacin)
Atributo Ventana de informacin de mensajes, Terminar aplicacin Inicializacin (*INZSR) Sin restricciones Terminacin (*TERMSR) Se termina el componente lgico y se visualiza una ventana de informacin asncrona. Manejo de eventos La ventana de informacin que se visualiza interfiere con cualquier evento que haya sido enviado. Si esta operacin se realiza desde la misma subrutina o subrutina de accin jerarquizada despus de efectuar una operacin CLSWIN o STOP (por ejemplo, los eventos Close Window o Close Component todava estn pendientes), esta operacin recibe los eventos pendientes y no se llevan a cabo.
Tabla 8. Restricciones para finalizar componentes lgicos durante la inicializacin, terminacin y el manejo de eventos
Finalizar un componente lgico *PSSR BEGSR.. ENDSR *DEFAULT *PSSR BEGSR.. ENDSR *NODEFAULT *PSSR BEGSR.. ENDSR *ENDCOMP o ENDSR *CANCL *PSSR BEGSR.. ENDSR *ENDAPPL Sin restricciones Sin restricciones Sin restricciones Sin restricciones No se puede finalizar un componente lgico desde una subrutina de accin jerarquizada. No se puede finalizar un componente lgico desde una subrutina de accin jerarquizada. Sin restricciones Sin restricciones Sin restricciones Inicializacin (*INZSR) Sin restricciones Terminacin (*TERMSR) Sin restricciones Manejo de eventos Sin restricciones
36
Excepciones/errores de archivo
Estos son algunos ejemplos de excepciones/errores de archivo: tipo de registro no definido, un error en el programa activador, una operacin de E/S a un archivo cerrado, un error de dispositivo y un error de secuencia de carga matriz/tabla. Estas excepciones/errores se pueden manejar de una de las siguientes maneras: v Se puede especificar el ampliador de cdigo de operacin E. Una vez especificado, y antes de empezar la operacin, este ampliador establece las funciones incorporadas %ERROR y %STATUS para que vuelvan a cero. Si se produce una excepcin/error durante la operacin, despus de la operacin %ERROR devuelve 1 y %STATUS devuelve el estado del archivo. La estructura de datos de informacin de archivo opcional se actualiza con la informacin de excepcin/error. Comprobando %ERROR y %STATUS podr determinar la accin que efectuar. v Se puede especificar un indicador en las posiciones 73 y 74 de las especificaciones de clculo para un cdigo de operacin. Este indicador se activa si se produce una excepcin/error durante el proceso de la operacin especificada. La estructura de datos de informacin de archivo opcional se actualiza con la informacin de excepcin/error. Comprobando el indicador podr determinar la accin que emprender. v Se puede especificar una subrutina de excepcin/error de archivo. En una especificacin de descripcin de archivo, la palabra clave INFSR define la subrutina con el nombre de la subrutina que va a recibir el control. La informacin referente a la excepcin/error de archivo est disponible mediante la estructura de datos de informacin de archivo que se especifica con la palabra clave INFDS en la especificacin de descripcin de archivo. Tambin puede utilizar la funcin incorporada %STATUS que devuelve el valor ms reciente para el estado del archivo o programa. Si se especifica un archivo, %STATUS devuelve el valor contenido en el campo INFDS *STATUS para el archivo especificado. v Si el indicador, el ampliador Eo la subrutina de excepcin/error de archivo no estn presentes, el gestor de errores por omisin de VisualAge RPG maneja todas las excepciones/errores de archivo.
37
v v v v
de de de de
de archivo (posiciones de 1 a 80) de apertura (posiciones de 81 a 240) de entrada/salida (posiciones de 41 a 366) dependiente de dispositivo (posicin 367)
Nota: La longitud de la INFDS depende de los campos que haya declarado en la INFDS.
*FILE
Los 8 primeros caracteres del nombre de archivo Indicacin de apertura (1 = abrir) Fin de archivo (1 = fin de archivo) Cdigo de estado. Consulte el apartado Cdigos de estado de archivo en la pgina 46.
38
Carcter
*OPCODE
Cdigo de operacin. Las cinco primeras posiciones (ajustadas a la izquierda) especifican el tipo de operacin utilizando la representacin de caracteres de los cdigos de operacin de clculo. Por ejemplo, si se procesaba un READE, READE se coloca en las cinco posiciones situadas ms a la izquierda. Los cdigos de operacin que tienen nombres de 6 letras deben acortarse a 5 letras. DELETE DELET EXCEPT EXCPT READPE REDPE UNLOCK UNLCK UPDATE UPDAT La posicin restante contiene uno de los siguientes valores: F La ltima operacin se especific para un nombre de archivo. La ltima operacin se especific para un registro. La ltima operacin era una operacin de archivo implcita.
22
29
Carcter
*ROUTINE
Los primeros 8 caracteres del nombre de procedimiento o cero si la llamada es mediante el puntero de procedimiento Nmero de lnea de listado fuente Razn especificada por el usuario para el error en el archivo SPECIAL
30 38
37 42
8 5.0
39
Carcter
*RECORD
En un archivo descrito por el programa el registro que identifica al indicador est situado lo ms a la izquierda del campo; las seis posiciones restantes tienen espacios en blanco. En un archivo descrito externamente, los 8 primeros caracteres del nombre del registro que se estaba procesando cuando se produjo la excepcin o el error.
46 53
52 66
Carcter Carcter
7 14
Si desea obtener una descripcin completa del contenido del rea de informacin de retorno de archivo, consulte el apartado DB2 Universal Database para AS/400 de la categora Bases de datos y sistemas de archivo de Information Center, que se halla en el sitio Web siguiente http://publib.boulder.ibm.com/pubs/html/as400/infocenter.htm. Ejemplo de informacin de retorno de archivo de la INFDS: Para definir una INFDS que contiene campos en la seccin de retorno de archivo, especifique las entradas siguientes: v Especifique la palabra clave INFDS en la especificacin de descripcin de archivo con el nombre de la estructura de datos de informacin de archivo v Especifique la estructura de datos de informacin de archivo y los subcampos que desea utilizar en una especificacin de definicin v Especifique las palabras clave especiales ajustadas a la izquierda, en el campo DESDE (posiciones 26-32) en la especificacin de definicin o bien especifique las posiciones de los campos en el DESDE (posiciones 26-32) y el campo A (posiciones 33-39).
FFilename++IT.A.FRlen+......A.Device+.Keywords+++++++++++++++++++++++++++++Comments++++++++++ FMYFILE IF E DISK INFDS(FILEFBK) REMOTE DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++Comments++++++++++ DFILEFBK DS D FILE *FILE * Nombre archivo D OPEN_IND 9 9 * Apertura archivo? D EOF_IND 10 10 * Archivo en eof? D STATUS *STATUS * Cdigo estado D OPCODE *OPCODE * ltimo cd.oper. D ROUTINE *ROUTINE * Rutina RPG D LIST_NUM 30 37 * Lnea listado D SPCL_STAT 38 42S 0 * Estado SPECIAL D RECORD *RECORD * Nombre registro D MSGID 46 52 * Error MSGID
Figura 10. Ejemplo de codificacin de una INFDS con informacin de retorno de archivo
40
Nota: Las palabras clave no son etiquetas y no se pueden utilizar para acceder a los subcampos. Las entradas cortas se rellenan por la derecha con espacios en blanco.
41
v Especifique la palabra clave INFDS en la especificacin de descripcin de archivo con el nombre de la estructura de datos de informacin de archivo v Especifique la estructura de datos de informacin de archivo y los subcampos que desea utilizar en una especificacin de definicin. v Consulte la informacin dada en el apartado DB2 Universal Database para AS/400 de la categora Bases de datos y sistemas de archivos de Information Center con el fin de determinar los campos que desea incluir en la INFDS. Para calcular las posiciones Desde y A (posiciones de la 26 a la 32 y de la 33 a la 39 de las especificaciones de definicin) que especifican los subcampos de la seccin de retorno de entrada/salida, utilice el desplazamiento, tipo de datos y longitud dados en Information Center y realice los clculos siguientes:
Desde = 241 + Desplazamiento A = Desde - 1 + Longitud_carcter Longitud_carcter = Longitud (en bytes)
42
El contenido del rea de retorno de entrada/salida dependiente de dispositivo del archivo se copia en la seccin de retorno dependiente de dispositivo de la INFDS nicamente despus de realizar un POST en el archivo. Para obtener ms informacin, consulte el apartado POST (Anotar) en la pgina 509. Ejemplos de informacin de retorno dependiente de dispositivo de INFDS: Para definir una INFDS que contiene campos en la seccin de retorno de dispositivo, especifique las entradas siguientes: v Especifique la palabra clave INFDS en la especificacin de descripcin de archivo con el nombre de la estructura de datos de informacin de archivo v Especifique la estructura de datos de informacin de archivo y los subcampos que desea utilizar en una especificacin de definicin v Consulte la informacin dada en el apartado DB2 Universal Database para AS/400 de la categora Bases de datos y sistemas de archivos de Information Center con el fin de determinar los campos que desea incluir en la INFDS. Para calcular las posiciones Desde y A (posiciones de la 26 a la 32 y de la 33 a la 39 de las especificaciones de definicin) que especifican los subcampos de la informacin de retorno dependiente de dispositivo, utilice el desplazamiento, tipo de datos y longitud dados en Information Center y realice los clculos siguientes:
Desde = 367 + Desplazamiento A = Desde - 1 + Longitud_carcter Longitud_carcter = Longitud (en bytes)
Por ejemplo, para el nmero relativo de registro de un archivo de base de datos, Information Center indica:
Desplazamiento = 30 Tipo de datos binarios Longitud = 4 Por tanto, Desde = 367 + 30 = 397, A = 397 - 1 + 4 = 400.
Figura 12. Ejemplo de codificacin de una INFDS con informacin de retorno especfica de base de datos
Consideraciones de bloqueo: Los campos del rea de realimentacin especfica de entrada/salida y, en la mayora de casos, los campos del rea de informacin de retorno especfica de dispositivo, no se actualizan en todas las operaciones realizadas en el archivo en el que los registros se bloquean u desbloquean, excepto en el caso del nmero relativo de registro y de la clave. Esta excepcin se produce cuando se efecta una operacin POST. En este caso, se actualizan todos los
Captulo 5. Manejo de excepciones y errores
43
campos de las reas de realimentacin especficas de dispositivo y especficas de entrada/salida. En una operacin POST, la clave y el nmero relativo de registro se actualizan con la informacin del registro actual, no el ltimo registro del bloqueo.
44
*ENDAPPL Termina todos los componentes lgicos actualmente activos finalizando la aplicacin. *ENDCOMP Termina el componente lgico de forma anormal. Blancos Devuelve el control al gestor de errores por omisin. Esto se aplica cuando el factor 2 es un valor de blancos y cuando el factor 2 no se especifica. Si la operacin EXSR llama a la subrutina y el factor 2 est en blanco, el control vuelve a la siguiente instruccin por orden. Los blancos slo son vlidos durante la ejecucin. 50-76 En blanco
Recuerde lo siguiente cuando especifique la subrutina de excepcin/error de archivo: v Puede llamar explcitamente a la subrutina de excepcin/error de archivo especificando el nombre de la subrutina en el factor 2 de la operacin EXSR. v Una vez ejecutada la operacin ENDSR de la subrutina de excepcin/error de archivo, el campo o elemento de matriz en el factor 2 se restablece en espacios en blanco. Si no coloca un valor en este campo durante el proceso de la subrutina, el gestor de errores por omisin recibe el proceso de seguimiento de control de la subrutina a menos que la operacin EXSR haya llamado a la subrutina. Debido a que el factor 2 est establecido en espacios en blanco, puede especificar el punto de retorno dentro de la subrutina que est mejor adaptada a la excepcin o error que se haya producido. Si la operacin EXSR ha llamado a la subrutina, el control vuelve a la prxima instruccin por orden siguiendo la operacin EXSR. Una subrutina de excepcin/error puede manejar errores de ms de un archivo. v Si se produce una excepcin error de archivo durante el inicio o el fin de un programa, el control pasa al gestor de errores por omisin y no a la excepcin/error escrita por el usuario o a la subrutina (INFSR). v Puesto que la subrutina de excepcin/error de archivo puede que reciba el control siempre que se produzca una excepcin o error de archivo, dicha excepcin o error podra producirse mientras la subrutina se est ejecutando si se procesa una operacin de E/S en el archivo que tiene el error. Si se produce una excepcin/error en el archivo que ya tiene un error mientras la subrutina se est ejecutando, se vuelve a llamar a la subrutina, con lo cual provocar un bucle de programa a menos que codifique la rutina para evitar este problema. Una manera de evitar un bucle de programa de este tipo es establecer un conmutador de primera vez en la subrutina. Si no es la primera vez que ejecuta la subrutina, active el indicador LR y emita la operacin RETURN de la siguiente manera:
45
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. C* Si INFSR ya maneja el error, salga. C ERRRTN BEGSR C SW IFEQ '1' C SETON LR C RETURN C* De lo contrario, seale el gestor de errores. C ELSE C MOVE '1' SW C : C : C : C ENDIF C* Finalice el proceso de errores. C MOVE '0' SW C ENDSR
Nota: Puede que no pueda continuar procesando el archivo cuando se ha producido un error de E/S. Para continuar, ser necesario emitir una operacin CLOSE y, a continuacin, una operacin OPEN en el archivo.
Nota: 1Dispositivo se refiere a los dispositivos a los que se aplica la condicin. Se utilizan las abreviaciones siguientes: P = IMPRESORA; D = DISCO; SP = ESPECIAL
46
01021
01022 01041 01042 01051 01211 01215 012162 012172 01218 01221 01222 01231 01235 01299
47
Dispositivo1
RC
Condicin
Nota: Dispositivo se refiere a los dispositivos a los que se aplica la condicin. Se utilizan las abreviaciones siguientes: P = IMPRESORA; D = DISCO; SP = ESPECIAL; 2 Todos los errores que se producen durante una operacin de apertura o de cierre tendrn como resultado un valor *STATUS de 1216 o 1217.
48
43
46
Carcter
47 91 171 191
44 80 20 8
49
201
208
Carcter
209
243
Carcter
35
244 254
10 10
264 270
10 6.0
276
281
6.0
50
288
293
Carcter
Fecha de compilacin del programa (en formato UDATE). Si la parte correspondiente al ao de este valor est comprendida entre 40 y 99, la fecha est comprendida entre 1940 y 1999. En caso contrario, est comprendida entre el 2000 y el 2039. El valor de siglo de las posiciones de la 199 a la 200 no es aplicable a este campo. Hora (en el formato hhmmss) en que el programa se compil Nivel del compilador Nombre del archivo fuente (primeros 10 caracteres) Reservado
6 4 10 116
00034
51
00035 00050
El resultado est terminando como resultado de una peticin terminacin implcita de otro componente lgico (padre del componente lgico STOP) La conversin ha dado como resultado una sustitucin.
Cdigos de excepcin/error: Cdigo Condicin 00100 00101 00102 00103 00104 00112 00113 Valor fuera de rango en operacin de series Raz cuadrada negativa Divisin por cero Un resultado intermedio no es suficientemente grande para contener el resultado Subdesbordamiento de flotantes. Un valor intermedio es demasiado pequeo para estar contenido en el campo del resultado intermedio. Valor de Fecha, Hora o Indicacin de la hora no vlido. Desbordamiento o subdesbordamiento de fechas. (Por ejemplo, cuando el resultado de un clculo de fecha da como resultado un nmero mayor que *HIVAL o menor que *LOVAL) Errores de correlacin de fechas, cuando se correlaciona una fecha de un ao de 4 caracteres a un ao de 2 caracteres y el rango de fechas no es 1940-2039 El campo de caracteres o grficos de longitud variable tiene una longitud actual que no es vlida. Tabla o matriz fuera de secuencia ndice de matriz no vlido OCCUR fuera de rango Se ha intentado la operacin restablecer durante el paso de inicializacin del programa Ha fallado el programa o procedimiento llamado Procedimiento o programa de llamada de error El programa llamado ha intentado utilizar un parmetro que no se le haba pasado Error de puntero o parmetro Error en operacin DSPLY No se ha encontrado rea de datos especificada en ENTRADA/SALIDA El tipo o la longitud del rea de datos no coincide rea de datos no bloqueada en salida Error en operacin IN/OUT Usuario no autorizado para utilizar el rea de datos Usuario no autorizado para cambiar el rea de datos Error en operacin UNLOCK rea de datos anteriormente bloqueada por otro programa
00114
00115 00120 00121 00122 00123 00202 00211 00221 00222 00333 00401 00411 00412 00413 00414 00415 00421 00431
52
rea de datos bloqueada por el programa en el mismo proceso Anomala al recuperar secuencia de ordenacin Control de compromiso no activo Ha fallado la operacin de retrotraccin Error en la operacin COMMIT Error en la operacin ROLBK Error de datos decimales (dgito o signo no vlido) Error en los servicios del sistema principal El nmero de nivel del compilador utilizado para generar el programa no coincide con el nmero de nivel de las subrutinas de ejecucin de VisualAge RPG. El nombre de atributo no es vlido Se ha intentado operacin SHOWWIN en una ventana abierta No se ha encontrado el nombre del componente en la aplicacin El valor del atributo nuevo no se encuentra dentro del rango vlido El tipo de acceso del atributo no es vlido para la operacin El tipo de datos del atributo de evento no es compatible con la operacin Identificador de mensajes no vlido El tipo de datos del atributo no es compatible con la operacin Recursos insuficientes Ha fallado la operacin START Ha fallado la operacin STOP Se ha producido un error en una operacin de subarchivo Error de recursin No hay indicador de errores ni *PSSR Anomala interna en el compilador de VisualAge RPG o en las subrutinas de ejecucin Excepcin de programa en la rutina del sistema.
01400 01401 01402 01403 01404 01405 01406 01407 01408 01410 01411 01420 08888 09001 09998 09999
53
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++Comments++++++++++ DMYPSDS SDS D PROC_NAME *PROC * Nombre componente lgico D PGM_STATUS *STATUS * Cdigo estado D PRV_STATUS 16 20S 0 * Estado anterior D LINE_NUM 21 28 * Nm.lnea listado fuente D ROUTINE *ROUTINE * Nombre rutina D PARMS *PARMS * Nm.parm. pasados D EXCP_TYPE 40 42 * Tipo excepcin D EXCP_NUM 43 46 * Nmero excepcin D* D EXCP_DATA 91 170 * Datos excepcin D* D DATE 191 198 * Fecha (form. *DATE) D YEAR 199 200S 0 * Ao (form. *YEAR) D LAST_FILE 201 208 * ltimo archivo usado D FILE_INFO 209 243 * Info errores de archivo D* D JOB_DATE 270 275S 0 * Fecha (form. UDATE) D RUN_DATE 276 281S 0 * Fecha ejec. (UDATE) D RUN_TIME 282 287S 0 * Hora ejec. (UDATE) D CRT_DATE 288 293 * Fecha creacin D CRT_TIME 294 299 * Hora creacin D CPL_LEVEL 300 303 * Nivel compilador D SRC_FILE 304 313 * Archivo fuente D*
Nota: Las palabras clave no son etiquetas y no se pueden utilizar para acceder a los subcampos. Las entradas cortas se rellenan por la derecha con espacios en blanco.
54
de la subrutina que est mejor adaptada para la excepcin o error que se ha producido. Si el factor 2 contiene blancos al final de la subrutina, el gestor de errores por omisin recibe el control; si una operacin EXSR o CASxx ha llamado a la subrutina, el control vuelve a la prxima instruccin por orden siguiendo el EXSR o ENDCS. Si la excepcin se ha producido en un subprocedimiento y no se ha encontrado ninguna operacin GOTO antes de la operacin ENDSR, se emite el cdigo de error 9001 y la aplicacin finaliza. El factor 2 no est soportado en la operacin ENDSR de las *PSSR del subprocedimiento. v Debido a que la subrutina de excepcin/error de programa puede recibir el control siempre que se produzca una excepcin /error de no archivo, podra producirse una excepcin o error mientras la subrutina se est ejecutando. Si esto ocurre, la subrutina es llamada de nuevo lo que conlleva un bucle de programa a menos que codifique la subrutina para evitar este problema. v Se puede definir una *PSSR en un subprocedimiento y cada subprocedimiento puede tener su propia *PSSR. Fjese que la *PSSR de un subprocedimiento es local en ese subprocedimiento. Si desea que los subprocedimientos compartan la misma rutina de excepcin, cada llamada de *PSSR deber tener un procedimiento compartido. v Si tiene una *PSSR que no est definido dentro de un subprocedimiento, esta *PSSR nunca se ejecuta si se produce una excepcin dentro de un subprocedimiento.
00032
00033
00034
00035
55
Cuando se produce una terminacin normal, la subrutina *TERMSR es llamada. *TERMSR es una subrutina escrita por el usuario desde la que se puede producir cualquier ejecucin de cdigo final. Cuando se invoca a *TERMSR, no hay subrutinas de accin activas y el componente lgico actual ha sido marcado como que est terminando. Esto significa que hay pocas operaciones de interfaz grfica de usuario permitidas. Consulte las siguientes tablas para obtener ms informacin: v Tabla 5 en la pgina 32 v Tabla 6 en la pgina 34 v Tabla 7 en la pgina 34 v Tabla 8 en la pgina 36
STOP
ENDSR
56
Si LR no est activado, la subrutina de accin actual finaliza y NO se ejecuta ninguna accin por omisin para el evento. v Si se especifica *ENDCOMP o *CANCL en el factor 2, finaliza la subrutina de accin que se estaba ejecutando cuando se produjo el error y el componente lgico termina de forma anormal. Consulte el apartado ENDSR (Fin de subrutina de usuario) en la pgina 445. v Si se especifica *ENDAPPL en el factor 2, termina la subrutina de accin que se estaba ejecutando cuando se produjo el error y todos los componentes lgicos de la aplicacin se cierran por orden jerrquico inverso. Consulte el apartado ENDSR (Fin de subrutina de usuario) en la pgina 445. El componente lgico que estaba activado cuando se produjo el error ha terminado de forma anormal. Todos los dems componentes lgicos terminan normalmente. Consulte los apartados Terminacin normal en la pgina 30 y Terminacin anormal en la pgina 32. Cuando se invoca al gestor de excepciones por omisin para una excepcin que se produce fuera de un procedimiento, se visualiza una ventana desde la cual puede elegir una de las siguientes opciones: v Realizar el proceso por omisin (se aplica la informacin de antes de ENDSR *DEFAULT) v No realizar el proceso por omisin (se aplica la misma informacin de antes para ENDSR *NODEFAULT) v Reintentar la operacin: Esta opcin slo aparece para un pequeo conjunto de errores de E/S. Le permite reintentar la misma operacin. v Terminar el componente lgico (se aplica la misma informacin de antes de ENDSR *ENDCOMP) v Terminar la aplicacin (se aplica la informacin de antes de ENDSR *ENDAPPL) Nota: Si se produce una excepcin dentro de un subprocedimiento y no existe ninguna *PSSR local o indicador de errores, la aplicacin finaliza. Cuando se da el control a una rutina de manejo de errores o al gestor de excepciones por omisin, la subrutina de accin actual que caus el error todava est activada. Todava puede acceder a los mismos atributos de evento que eran vlidos en el momento del error. Por ejemplo, el atributo de evento %BUTTON es vlido durante el proceso del evento MouseDown. Si se produce un error durante el manejo de este evento, se puede hacer referencia a %BUTTON en la *PSSR. Nota: Si se hace referencia a %BUTTON en la *PSSR para un evento donde el atributo de evento no es vlido, entonces se produce un error. Este tipo de error puede fcilmente provocar que la aplicacin entre en una situacin de recursin interminable si no se codifica correctamente la *PSSR para manejar esta situacin. En los casos en que diversas subrutinas de accin estn anidadas, la rutina de manejo de errores slo afecta a la mxima invocacin de subrutinas de accin cuando se ejecuta ENDSR *DEFAULT, *NODEFAULT o un nombre de campo equivalente. Por ejemplo, si se ejecuta SHOWWIN WINDOW2 desde dentro de la subrutina de accin BUTTON+CLICK+WINDOW1, se suspende BUTTON+CLICK+WINDOW1 y se invoca a la subrutina de accin WINDOW2+CREATE+WINDOW2. Si se produce un error mientras se invoca a esta segunda subrutina de accin, se invoca a la *PSSR o al gestor de excepciones por omisin. Si se toma *DEFAULT, nicamente finaliza
57
Manejo de excepciones
El gestor de excepciones de VisualAge RPG ha detectado las siguientes excepciones. Estas excepciones estn situadas en el campo nmero de excepciones (43-46) de la PSDS como un nmero binario de 4 bytes con *EX situado en el campo tipo de excepcin (40-42) de la PSDS.
Violacin de acceso Divisin de enteros por cero Divisin de flotantes por cero Operacin no vlida de flotantes Instruccin no permitida Instruccin privilegiada Desbordamiento de enteros Desbordamiento de flotantes Subdesbordamiento de flotantes Operando anormal de flotantes Resultado inexacto de flotantes Comprobacin de pila de flotantes Desalineacin de tipo de datos Secuencia de bloqueo no vlida Lmites de matriz excedidos 0xC0000005 0xC000009B 0xC0000095 0xC0000097 0xC000001C 0xC000009D 0xC000009C 0xC0000098 0xC000009A 0xC0000094 0xC0000096 0xC0000099 0xC000009E 0xC000001D 0xC0000093
Para obtener ms informacin sobre excepciones especficas de Windows, consulte la documentacin del sistema operativo. Todas las dems excepciones se manejan de una de las siguientes maneras: v Si la excepcin se produce durante un CALLB o CALL, el cdigo de estado se establece en 202 o 211. v Si la excepcin no se produce durante una CALLB o CALL, las excepciones se correlacionan a un cdigo de estado de la siguiente manera:
Divisin de enteros por cero Divisin de flotantes por cero Desbordamiento de flotantes Violacin de acceso Desalineacin de tipo de datos Las dems excepciones 102 102 103 222 222 9999
58
Definicin de subprocedimiento
Los subprocedimientos se definen despus de la seccin fuente principal. En la Figura 14 en la pgina 60se muestra un subprocedimiento y se resaltan las diferentes partes que lo componen.
59
* Prototipo para el procedimiento FUNCTION * D FUNCTION PR 10I 0 1 D TERM1 5I 0 VALUE D TERM2 5I 0 VALUE D TERM3 5I 0 VALUE * P Function B 2 * *------------------------------------------------------------* Este procedimiento realiza una funcin sobre los 3 valores * numricos pasados como parmetros de valor. * * Esto muestra cmo se especifica una interfaz de procedimiento * para un procedimiento y la devolucin de valores desde el mismo. *------------------------------------------------------------* D Function PI 10I 0 3 D Term1 5I 0 VALUE D Term2 5I 0 VALUE D Term3 5I 0 VALUE D Result S 10I 0 4 C EVAL Result = Term1 ** 2 * 17 C + Term2 * 7 5 C + Term3 C RETURN Result * 45 + 23 P E 6 *
1. Un prototipo que especifica el nombre, el valor de retorno, si lo hay y los parmetros, si los hay. 2. Una especificacin de Inicio de procedimiento (B en la posicin 24 de una especificacin de procedimiento) 3. Una definicin de Interfaz del procedimiento, que especifica el valor de retorno y los parmetros, si procede. La interfaz de procedimiento debe coincidir con el prototipo correspondiente. La definicin de interfaz de procedimiento es opcional si el subprocedimiento no devuelve un valor y no se le pasa ningn parmetro. 4. Otras especificaciones de definicin de variables, constantes y prototipos que necesita el subprocedimiento. Se trata de definiciones locales. 5. Todas las especificaciones de clculo necesarias para llevar a cabo la tarea del procedimiento. Los clculos pueden hacer referencia a definiciones locales y globales. Todas las subrutinas incluidas dentro del subprocedimiento son locales. No se pueden utilizar fuera del subprocedimiento. Si el subprocedimiento devuelve un valor, tambin debe contener una operacin RETURN. 6. Una especificacin de Fin de procedimiento (E en la posicin 24 de una especificacin de procedimiento) Excepto para la definicin de interfaz de procedimiento, que se puede ubicar en cualquier lugar de las especificaciones de definicin, un subprocedimiento se debe codificar en el orden que se muestra ms arriba. No puede codificar lo siguiente para los subprocedimientos: v Matrices y tablas de tiempo de preejecucin y tiempo de compilacin v Definiciones *DTAARA
60
Las especificaciones de clculo se procesan slo una vez y el procedimiento retorna al final de las especificaciones de clculo. Consulte el apartado Clculos de subprocedimiento en la pgina 63 si desea ms informacin. Puede exportarse un subprocedimiento, lo que significa que otros procedimientos de otros mdulos del programa pueden llamarlo. Para indicar que debe exportarse, especifique la palabra clave EXPORT en la especificacin de Inicio de procedimiento. Si no se especifica, nicamente se puede llamar al subprocedimiento desde el mdulo. Tenga en cuenta que los procedimientos slo pueden exportarse desde las DLL NOMAIN.
Valores de retorno
Un procedimiento que devuelve un valor es esencialmente una funcin definida por el usuario, parecida a una funcin incorporada. Para definir un valor de retorno para un subprocedimiento, debe: 1. Definir el valor de retorno en el prototipo y las definiciones de interfaz de procedimiento del subprocedimiento. 2. Codificar una operacin RETURN con una expresin en el campo factor 2 ampliado que contiene el valor a devolver. La longitud y el tipo del valor de retorno se definen en la especificacin de interfaz de procedimiento (la especificacin de definicin con PI en las posiciones 24-25). Tambin estn permitidas las palabras clave siguientes: DATFMT(fmt) El valor de retorno tiene el formato de fecha especificado en la palabra clave. DIM(N) El valor de retorno es una matriz de N elementos. LIKE(nombre) El valor de retorno se define como el tem especificado por la palabra clave. PROCPTR El valor de retorno es un puntero de procedimiento.
61
TIMFMT(fmt) La palabra clave especifica el formato de hora del valor de retorno. Para devolver el valor al llamador, debe codificar una operacin RETURN con una expresin que contenga el valor de retorno. La expresin del campo factor 2 ampliado est sujeta a las mismas reglas que una expresin con EVAL. El valor devuelto real desempea la misma funcin que el lado izquierdo de la expresin EVAL, mientras que el factor 2 ampliado de la operacin RETURN desempea la misma funcin que el lado derecho. Debe asegurarse de que se lleva a cabo una operacin RETURN si el subprocedimiento tiene un valor de retorno definido; de lo contrario, se emite una excepcin para el llamador del subprocedimiento.
mbito de definiciones
Los tems definidos en un subprocedimiento son locales. Si un tem se define con el mismo nombre que un tem de datos global, todas las referencias al nombre hechas dentro del subprocedimiento utilizan la definicin local. Sin embargo, recuerde lo siguiente: v Slo el procedimiento para el que se han definido conoce los nombres de las subrutinas y las etiquetas, incluso aquellos definidos en el procedimiento principal de un EXE. v Todos los campos especificados en las especificaciones de entrada y de salida son globales. Cuando un subprocedimiento utiliza especificaciones de entrada o salida (por ejemplo, cuando procesa una operacin de lectura), se utiliza el nombre global aunque haya una variable local del mismo nombre. Cuando se utiliza una sentencia KLIST o PLIST global en un subprocedimiento, algunos campos pueden tener los mismos nombres que los campos locales. Si esto sucede, se utiliza el campo global. Esto puede originar problemas al preparar una KLIST o PLIST antes de utilizarla. Por ejemplo, observe el fuente siguiente:
D* Definiciones del procedimiento principal D Fld1 S 1A D Fld2 S 1A D* C* Definir una lista de campos de clave globales con dos campos, C* Fld1 y Fld2 C global_kl KLIST C KFLD Fld1 C KFLD Fld2 C* P* Seccin de subprocedimiento P Subproc B D Fld2 S 1A D* C* local_kl tiene un kfld global (fld1) y uno local (fld2) C* C local_kl KLIST C KFLD Fld1 C KFLD Fld2 C* C* Aunque Fld2 se define localmente en el subprocedimiento, C* global_kl utiliza Fld2 global, ya que las KLIST globales C* siempre utilizan campos globales. Por tanto, la C* asignacin a Fld2 local NO afecta a la operacin CHAIN. C* C EVAL Fld1 = 'A' C EVAL Fld2 = 'B' C global_kl SETLL file
62
C* C* Las KLIST locales utilizan campos globales slo cuando no C* hay un campo local con ese nombre. local_kl utiliza Fld2 C* local y as la asignacin a Fld2 AFECTAR a la operacin C* CHAIN. C EVAL Fld1 = 'A' C EVAL Fld2 = 'B' C local_kl SETLL file ... P E
Para obtener ms informacin acerca de la situacin de las definiciones y del efecto sobre el mbito, consulte el apartado Ubicacin de definiciones y mbito en la pgina 228.
Clculos de subprocedimiento
Un subprocedimiento finaliza cuando se da una de las condiciones siguientes: v Se procesa una operacin RETURN. v Se procesa el ltimo clculo del cuerpo del subprocedimiento. La Figura 15 en la pgina 64 muestra los pasos del proceso normal de un subprocedimiento. La Figura 16 en la pgina 65 muestra la secuencia de manejo de excepciones/errores.
63
Inicio
Ejecutar inicializacin de mdulo Efectuar inicializacin de estructuras de datos y de subcampos Recuperar indicadores externos (U1 a U8) y campos de fecha de usuario Abrir archivos Cargar datos del rea de datos local, estructuras, matrices y tablas
No
Si no hay ningn *INZSR, almacenar estructuras de datos y variables para operaciones RESET
Inicializar variables estticas Almacenar variables para operaciones RESET en variables locales
No
Operacin de retorno
Si el subprocedimiento devuelve un valor, se efectu una operacin RETURN? No Sealizar excepcin a llamador (el subprocedimiento finaliza)
Devolver a llamador
Seguir la rama No significa que ya se ha llamado a otro procedimiento desde que se activ el programa. Debe asegurarse de no hacer suposiciones incorrectas acerca del estado de los archivos, las reas de datos, etc., ya que otro procedimiento puede haber cerrado archivos o desbloqueado reas de datos.
64
Error de programa y subprocedimiento tienen *PSSR? No Excepcin de filtracin (el subprocedimiento finaliza)
No
A continuacin se proporcionan algunos puntos a tener en cuenta al codificar los subprocedimientos: v No hay ningn *INZSR asociado a los subprocedimientos. Los datos se inicializan (con valores INZ o valores por omisin) cuando se llama al procedimiento por primera vez, pero antes de empezar los clculos. v Cuando un subprocedimiento retorna normalmente, el valor de retorno, si est especificado en el prototipo del programa o procedimiento llamado, se pasa al llamador. No se produce nada ms automticamente. Se han de cerrar manualmente todos los archivos y reas de datos. Los archivos deben grabarse manualmente. En el caso de un EXE, puede activar indicadores tales como LR, pero el programa no terminar hasta que el procedimiento principal del EXE termine. v La gestin de excepciones dentro de un subprocedimiento difiere bsicamente de un procedimiento principal en que no hay un gestor de excepciones por omisin para los subprocedimientos y, de este modo, situaciones en las que se llamara al gestor por omisin para un procedimiento principal corresponden a una finalizacin anmala del subprocedimiento. Por ejemplo, el Factor 2 de una operacin ENDSR para una subrutina *PSSR dentro de un subprocedimiento debe estar en blanco. Un factor 2 en blanco significara pasar el control al gestor por omisin, pero en un subprocedimiento, si se ha alcanzado ENDSR, el subprocedimiento finalizar de forma anmala. Puede evitar la terminacin anmala codificando una operacin RETURN en la *PSSR, o codificando GOTO y una etiqueta en el subprocedimiento para continuar el proceso. v La subrutina de error *PSSR es local para el subprocedimiento. A la inversa, los errores de archivo son globales por definicin y por tanto no puede codificar INFSR en un subprocedimiento ni utilizar un archivo para el que se ha codificado INFSR.
Mdulo NOMAIN
Puede codificar uno o varios subprocedimientos en un mdulo sin codificar subrutinas de accin. Un mdulo de estas caractersticas se denomina mdulo NOMAIN y requiere la especificacin de la palabra clave NOMAIN en la especificacin de control. El concepto de una DLL NOMAIN es parecido al de un programa de servicio de OS/400.
65
Para las DLL NOMAIN, debe tenerse en cuenta lo siguiente: v La DLL slo debe constar de procedimientos. Todas las subrutinas (BEGSR) deben ser locales a un procedimiento. v En este fuente no se permiten cdigos de operacin GUI, lo que incluye START, STOP, SETATR, GETATR, %SETATR, %GETATR, SHOWWIN, CLSWIN y READS. Se puede utilizar DSPLY. No obstante, si se llama al procedimiento que lo contiene desde una DLL VisualAge RPG, el cdigo de operacin DSPLY no realiza ninguna funcin. v No se permiten *INZSR y *TERMSR. v No se permiten parmetros *ENTRY.
Mdulo EXE
Un mdulo se denomina mdulo EXE cuando tiene especificada la palabra clave EXE en la especificacin de control. El mdulo EXE consta de un procedimiento principal y subprocedimientos. Todas las subrutinas (BEGSR) deben ser locales a un procedimiento. El EXE debe contener un procedimiento cuyo nombre coincida con el nombre del archivo fuente. Este ser el punto de entrada principal para el EXE; es decir, el procedimiento principal. Para los mdulos EXE, se debe tener en cuenta lo siguiente: v En este fuente no se permiten cdigos de operacin GUI. Esto incluye START, STOP, SETATR, GETATR, %SETATR, %GETATR, SHOWWIN, CLSWIN y READS. Se puede utilizar DSPLY. v No se permiten *INZSR y *TERMSR. v No se permiten parmetros *ENTRY. Si existen parmetros de entrada, se especifican en la definicin del parmetro para el procedimiento principal y se deben pasar por VALUE (se debe especificar la palabra clave VALUE para cada parmetro). No pueden ser parmetros UCS-2. v La palabra clave EXPORT no est permitida en la especificacin P Begin. v El valor de retorno para el procedimiento principal se debe definir como un nmero binario o entero de precisin cero(0).
Subprocedimientos y subrutinas
Un subprocedimiento se parece a una subrutina, con la salvedad de que un subprocedimiento ofrece las mejoras siguientes: v Puede pasar parmetros a un subprocedimiento, incluso pasarlos por valor. Esto significa que los parmetros utilizados para comunicarse con los subprocedimientos no tienen que ser modificables. Los parmetros que se pasan por referencia, como ocurre con los programas, deben ser modificables y son, por tanto, menos fiables. v En el tiempo de compilacin se comprueba la coherencia de los parmetros pasados a un subprocedimiento y de los recibidos por ste. Esto ayuda a reducir los errores de tiempo de ejecucin, que pueden ser ms costosos. v Puede utilizar un subprocedimiento como una funcin incorporada en una expresin. Cuando se utiliza de esta forma, devuelven un valor al llamador. Esto permite bsicamente definir de forma personalizada los operadores que pueda necesitar en una expresin. v Los nombres definidos en un subprocedimiento no son visibles fuera del subprocedimiento.
66
Esto significa que hay menor probabilidad de que el procedimiento cambie inadvertidamente un tem compartido por otros procedimientos. Adems, el llamador del procedimiento no necesita conocer tanto acerca de los tems utilizados dentro del subprocedimiento. v Puede llamar al subprocedimiento desde fuera del mdulo, si se exporta. v Puede llamar a subprocedimientos de forma recursiva. v Los procedimientos se definen en un tipo de especificacin distinto, es decir: especificaciones de procedimiento. Este tipo distinto permite reconocer inmediatamente que se est tratando con una unidad aparte. Sin embargo, si no necesita las mejoras ofrecidas por los subprocedimientos, debera utilizar una subrutina. El proceso de una subrutina es mucho ms rpido que la llamada a un subprocedimiento.
Prototipos y parmetros
La forma recomendada de llamar a programas y procedimientos consiste en utilizar llamadas mediante prototipo, ya que estas llamadas permiten al compilador comprobar la interfaz de llamada en el tiempo de compilacin. Si codifica un subprocedimiento, necesitar codificar una interfaz de procedimiento para permitir que el compilador haga coincidir la interfaz de llamada con el subprocedimiento. En este apartado se indica cmo definir lo siguiente: prototipos, parmetros con prototipo e interfaces de procedimiento.
Prototipos
Un prototipo es una definicin de la interfaz de llamada. Incluye la informacin siguiente: v Si la llamada es enlazada (procedimiento) o dinmica (programa) v Cmo encontrar el programa o procedimiento (el nombre externo) v El nmero y naturaleza de los parmetros v Qu parmetros deben pasarse y cules se pasan opcionalmente v El tipo de datos del valor de retorno, si lo hay (para un procedimiento) Se debe incluir un prototipo en las especificaciones de definicin del programa o procedimiento que realiza la llamada. El compilador utiliza el prototipo para llamar correctamente al programa o procedimiento y para asegurar que el llamador pasa los parmetros correctos. Las normas siguientes se aplican a las definiciones de prototipo. v Un nombre de prototipo debe especificarse en las posiciones 7-21. Si se especifica la palabra clave EXTPROC en la definicin de prototipo, las llamadas al programa o procedimiento utilizan el nombre externo especificado para esa palabra clave. Si no se especifica la palabra clave, el nombre externo es el nombre de prototipo, es decir, el nombre especificado en las posiciones 7-21 (en maysculas). v Especifique PR en la entrada del Tipo de definicin (posiciones 24-25). Las definiciones de parmetros deben ir inmediatamente despus de la especificacin PR. La definicin de prototipo finaliza con la primera especificacin de definicin que no tenga espacios en blanco en las posiciones 24-25 o con una especificacin no de definicin. v Especifique cualquiera de las palabras clave siguientes en tanto que pertenecen a la interfaz de llamada:
67
EXTPROC(nombre) La llamada ser una llamada de procedimiento enlazado que utiliza el nombre externo especificado por la palabra clave. CLTPGM(nombre) La llamada ser una llamada de programa externo que utiliza el nombre externo especificado por la palabra clave. v En la definicin de PR se especifica un valor de retorno, si lo hay. Especifique la longitud y el tipo de datos del valor de retorno. Adems, puede especificar las palabras clave siguientes para el valor de retorno: DATFMT(fmt) El valor de retorno tiene el formato de fecha especificado en la palabra clave. DIM(N) El valor de retorno es una matriz de N elementos. LIKE(nombre) El valor de retorno se define como el tem especificado por la palabra clave. PROCPTR El valor de retorno es un puntero de procedimiento. TIMFMT(fmt) La palabra clave especifica el formato de hora del valor de retorno. Para obtener informacin acerca de estas palabras clave, consulte el apartado Palabras clave de especificacin de definicin en la pgina 237. Figura 17 muestra un prototipo para un subprocedimiento CVTCHR que toma un parmetro de entrada numrico y devuelve una serie de caracteres. Tenga en cuenta que no hay ningn nombre asociado al valor de retorno. Por esta razn, no puede visualizar el contenido al depurar el programa.
* El valor devuelto es la representacin de caracteres * del parmetro de entrado, NUM, justificado a la * izquierda y rellenado con blancos por la derecha. D CVTCHR D NUM * * * * C C C PR 31A 30P 0 VALUE
* *
La expresin siguiente muestra una llamada a CVTCHR. Si la variable rrn tiene el valor 431, tras este EVAL, la variable msg tendra el valor 'Registro 431 no encontrado.' EVAL msg = 'Registro ' + %TRIMR(CVTCHR(RRN)) + ' no encontrado '
68
ASCEND La matriz est por orden ascendente. DATFMT(fmt) El parmetro de fecha tiene el formato fmt. DIM(N) El parmetro es una matriz con N elementos. LIKE(nombre) El parmetro se define igual que el tem especificado por la palabra clave. PROCPTR El parmetro es un puntero de procedimiento. TIMFMT(fmt) El parmetro de hora tiene el formato fmt. Para obtener informacin acerca de estas palabras clave, consulte el apartado Palabras clave de especificacin de definicin en la pgina 237. Las palabras clave siguientes, que especifican cmo debe pasarse el parmetro, tambin se permiten en las especificaciones de definicin de parmetros: CONST El parmetro se pasa por referencia de slo lectura. Un parmetro definido con CONST no debe ser modificado por el programa o procedimiento llamado. Este mtodo de paso de parmetros permite pasar literales y expresiones. NOOPT El parmetro no se optimizar en el programa o procedimiento llamado. OPTIONS(opt1 { : opt2 { : opt3 { : opt4 } } }) Donde opt1 ... opt4 puedes ser *OMIT, *VARSIZE o *STRING. Por ejemplo, OPTIONS(*VARSIZE). Especifica las opciones de paso de parmetros siguientes: *OMIT *VARSIZE El valor especial *OMIT puede pasarse para este parmetro de referencia. El parmetro puede contener menos datos de los indicados en la definicin. Esta palabra clave slo es vlida para parmetros de caracteres, parmetros grficos o matrices pasadas por referencia. El programa o procedimiento llamado debe tener alguna manera de determinar la longitud del parmetro pasado. Nota: Si no se especifica this(*VARSIZE) para los campos de longitud fija, debe pasar como mnimo tantos datos como requiera el prototipo; en el caso de los campos de longitud variable, el parmetro debe tener la misma lomgitud mxima declarada que la indicada en la definicin. *RIGHTADJ En un parmetro CONST o VALUE, *RIGHTADJ indica que debe ajustarse por la derecha el valor del parmetro de tipo grfico, UCS-2 o carcter. Pasar un valor de caracteres como una serie terminada en
*STRING
69
nulo. Esta palabra clave slo es vlida para parmetros de puntero de base pasados por valor o por referencia de slo lectura. VALUE El parmetro se pasa por valor. Para obtener informacin sobre las palabra clave listadas, consulte el apartado Palabras clave de especificacin de definicin en la pgina 237.
Interfaz de procedimiento
Si un procedimiento con prototipo tiene parmetros de llamada o un valor de retorno, debe definirse una definicin de interfaz de procedimiento, en la seccin fuente principal (para un procedimiento principal) o en la seccin de subprocedimiento. Una definicin de interfaz de procedimiento repite la informacin de prototipo dentro de la definicin de un procedimiento. Se utiliza para anunciar los parmetros de entrada del procedimiento y asegurarse de que la definicin interna de ste es coherente con la definicin externa (el prototipo). Las reglas siguientes se aplican a las definiciones de interfaz de procedimiento: v El nombre de la interfaz de procedimiento, especificado en las posiciones 7-21, es opcional. Si se especifica, debe coincidir con el nombre especificado en las posiciones 7-21 de la definicin de prototipo correspondiente. v Especifique PI en la entrada de Tipo de definicin (posiciones 24-25). La definicin de interfaz de procedimiento puede especificarse en cualquier parte de las especificaciones de definicin. En el procedimiento principal, la interfaz de procedimiento debe ir precedida por el prototipo al que hace referencia. En un subprocedimiento se necesita una interfaz de procedimiento si el procedimiento devuelve un valor o si tiene parmetros, de lo contrario es opcional. v Las definiciones de parmetros, indicadas mediante espacios en blanco en las posiciones 24-25, deben ir inmediatamente a continuacin de la especificacin PI. v Deben especificarse los nombres de parmetros, aunque no tengan que coincidir con los nombres especificados en el prototipo. v Todos los atributos de los parmetros, incluyendo el tipo de datos, la longitud y la dimensin, deben coincidir exactamente con los de la definicin de prototipo correspondiente. v Las palabras clave especificadas en la especificacin PI y las especificaciones de parmetro deben coincidir con las especificadas en el prototipo. Si un mdulo contiene llamadas a un procedimiento, debe haber una definicin de prototipo para cada programa y procedimiento que quiera llamar. Una forma de minimizar la codificacin necesaria consiste en almacenar prototipos en archivos /COPY. Si proporciona procedimientos con prototipo para otros usuarios, asegrese de proporcionar tambin los prototipos (en archivos /COPY).
70
71
2.
3. 4. 5.
6. 7. 8. 9.
antes de los datos de tiempo de compilacin (** en las posiciones 1 y 2): INCLUDE, BEGIN DECLARE, END DECLARE. Para indicar dnde comienza una sentencia SQL, codifique /EXEC SQL en las posiciones 7 a 15. La posicin 16 debe estar en blanco. El resto de la lnea desde la posicin 17 a la 80 puede ser una sentencia SQL o parte de ella. Para especificar el final de una sentencia SQL, codifique /END-EXEC en las posiciones 7 a 15. Solamente se puede codificar una sentencia SQL entre /EXEC SQL y /END-EXEC. Una sentencia SQL se puede codificar en varias lneas. Las lneas comprendidas entre /EXEC SQL y /END-EXEC deben contener un signo ms (+) en la posicin 7 y un espacio en blanco en la posicin 8. Los literales de tipo carcter pueden ocupar varias lneas. Se codifican hasta la columna 80 en una lnea y continan en la columna 9 de la lnea siguiente. Para especificar una lnea de comentario en la sentencia SQL, coloque un asterisco (*) en la posicin 7. Para especificar un comentario en la misma lnea que una sentencia SQL, utilice -- en sta. Debe evitarse la utilizacin de nombres que comiencen por SQL en el programa, ya que pueden entrar en conflicto con los nombres SQL.
72
Fecha
DATE
Fecha
Hora
TIME
Hora
Indicacin de la hora
73
7. Las variables de indicador deben ser declaradas como numricos binarios de 4 dgitos. 8. Las estructuras de datos de aparicin nica sin subcampos son consideradas tipo de datos carcter siguiendo las reglas RPG normales (consulte Captulo 11. Estructuras de datos en la pgina 147). Las estructuras de datos con subcampos se consideran estructuras del lenguaje principal.
Figura 19. Codificacin de variables del lenguaje principal sin utilizar una estructura de datos
Figura 20. Codificacin de variables del lenguaje principal utilizando una estructura de datos
A pesar de que existe cierta codificacin extra para los subcampos de la estructura de datos, la lista de las variables del lenguaje principal en la sentencia SQL es mucho ms pequea. Puesto que probablemente existen varias sentencias SQL en el programa, el esfuerzo de codificacin global puede ser menor.
74
----+-*--1----+----2----+----3----+----4----+----5----+----6----+ D ROW DS D F1 1 10 D F2 11 20 D F3 21 30 D F4 31 40 D F5 41 50 D F6 51 60 D F7 61 70 * D STRUCT DS D AI 1 14B 0 DIM(7) * C/EXEC SQL C+ SELECT * C+ INTO :ROW:AI C+ FROM TABLEX C+ WHERE NAME='GASPARE' C/END-EXEC
Es lo mismo que codificar cada elemento de matriz como una variable de indicador. Por ejemplo, la variable de indicador para el campo F1 es AI(1); para el campo F2, AI(2); etc.
75
Si se ha especificado la sentencia INCLUDE SQLCA, la definicin de la estructura de datos se incluye en ese punto del programa. Las instancias posteriores de la sentencia INCLUDE SQLCA son ignoradas. Nota: La estructura de datos SQLCA tambin se puede incluir utilizando la directiva del compilador /COPY, en lugar de /EXEC SQL INCLUDE SQLCA. La Figura 22 muestra el diseo de la estructura de datos SQLCA:
----+-*--1----+----2----+----3----+----4----+----5----+----6----+ SQL D* Inicio de la estructura de datos SQLCA SQL D SQLCA DS SQL D SQLAID 1 8A SQL D SQLABC 9 12B 0 SQL D SQLCOD 13 16B 0 SQL D SQLERL 17 18B 0 SQL D SQLERM 19 88A SQL D SQLERP 19 96A SQL D SQLERRD 97 120B 0 DIM(6) SQL D SQLERR 97 120A SQL D SQLER1 97 100B 0 SQL D SQLER2 101 104B 0 SQL D SQLER3 105 108B 0 SQL D SQLER4 109 112B 0 SQL D SQLER5 113 116B 0 SQL D SQLER6 117 120B 0 SQL D SQLWRN 121 127A SQL D SQLWN0 121 121A SQL D SQLWN1 122 122A SQL D SQLWN2 123 123A SQL D SQLWN3 124 124A SQL D SQLWN4 125 125A SQL D SQLWN5 126 126A SQL D SQLWN6 127 127A SQL D SQLWN7 128 128A SQL D SQLWN8 129 129A SQL D SQLWN9 130 130A SQL D SQLWNA 131 131A SQL D SQLSTT 132 136A SQL D* Fin de la estructura de datos SQLCA
Nota: La <condicin> es SQLWARNING, SQLERROR o NOT FOUND. La <accin> es GOTO <nombre-etiqueta>, GO TO <nombre-etiqueta> o CONTINUE.
76
La sentencia /EXEC SQL WHENEVER identifica la accin que se realizar cuando una sentencia SQL vuelve con un cdigo de retorno de no cero. Se aplica a todas las posteriores sentencias SQL en el programa hasta la sentencia /EXEC SQL WHENEVER siguiente. Se emite un mensaje siempre que la accin no se puede aplicar basndose en la seccin del cdigo donde se encuentra la sentencia. La Figura 24 ilustra este caso.
---+-*--1----+----2----+----3----+----4----+----5----+----6----+ 1 C SUBR1 BEGSR 2 C/EXEC SQL WHENEVER SQLERROR GOTO ERRLAB 3 C/END-EXEC 4 C ERRLAB TAG 5 C ENDSR 6 C SUBR2 BEGSR 7 C/EXEC SQL FETCH ... 8 C/END-EXEC 9 C ENDSR
En este ejemplo, la sentencia 7 no es vlido puesto que la accin WHENEVER provocara una bifurcacin en otra subrutina. Los posibles valores de la condicin son: v SQLWARNING: La accin es invocada si el valor del cdigo de retorno SQL es mayor que 0 y menor que 100. v SQLERROR: La accin es invocada si el valor del cdigo de retorno SQL es menor que 0. v NOT FOUND: La accin es invocada si el valor del cdigo de retorno SQL es 100. Los posibles valores de la accin son: v GOTO <nombre-etiqueta>: Si la condicin es autntica, la ejecucin se reanuda en el nombre de etiqueta especificado. v CONTINUE: Si la condicin es autntica, la ejecucin se reanuda en la siguiente sentencia ejecutable en el programa. Esta es la accin por omisin. Nota: La sentencia /EXEC SQL WHENEVER debe aparecer en las especificaciones de clculo.
77
Tabla 14. Asignacin de tipos SQL a las variables del lenguaje principal (continuacin)
Tipo de datos de SQL Tipo de datos de VARPG Formato de datos Longitud (Bytes) (pos 43) DECIMAL(m,n) CHAR(m) DATE TIME TIMESTAMP GRAPHIC(m) Decimal empaquetado Carcter Fecha Hora Indicacin de la hora Grfico G P (pos 44-51) (pos 52) m/2+1 m 10 8 26 m*2 n Posiciones decimales
78
v La base de datos a la que accede la aplicacin debe estar catalogada en la estacin de trabajo v Deber tener la autorizacin necesaria para acceder a la base de datos v La indicacin de la hora con la que se construy la aplicacin debe coincidir con la indicacin de la hora del paquete de la base de datos a la que se accede. Cuando ejecute la aplicacin de VisualAge RPG, el Gestor de base de datos DB2 se inicia automticamente (DB2START). Si ejecuta la aplicacin desde un entorno de cliente, usted mismo deber iniciar el gestor de base de datos en el servidor. Si la aplicacin ha sido construida con enlace diferido, los archivos de enlace lgico que se producen deben enlazarse a la base de datos antes de poder ejecutar la aplicacin. Al construir la aplicacin, hay una indicacin de la hora incorporada. Esta indicacin de la hora se compara con el paquete de la base de datos al ejecutar la aplicacin. Si las indicaciones de la hora no son iguales, la aplicacin no se ejecutar. Esta discrepancia puede producirse si la aplicacin se ejecuta dentro de un paquete ms antiguo. Si traslada la aplicacin a otra estacin de trabajo, las indicaciones de la hora de la aplicacin deben coincidir con las indicaciones de la hora del paquete al que acceder en la estacin de trabajo nueva. Puede realizar una de estas acciones: v Volver a ejecutar bind en la aplicacin emitiendo el siguiente mandato desde la lnea de mandatos:
sqlbind applic1.bnd typesx
donde sqlbind es el mandado de DB2, applic1.bnd es el archivo de enlace creado durante la construccin y typesx es la base de datos a la que desea acceder. v Configurar el acceso a la base de datos utilizada por la aplicacin. Deber catalogar la base de datos a la que intenta acceder en la estacin de trabajo nueva. Se trata de la misma base de datos utilizada durante la construccin. La base de datos puede encontrarse en otra estacin de trabajo o bien en un sistema remoto.
Nota: LATONA es el nombre de la base de datos. Puede utilizar una variable para el nombre de la base de datos como se muestra en el siguiente ejemplo:
D server D userid D password ... C s s s eval 10a 8a 10a server = 'LATONA'
Captulo 7. Soporte SQL
79
C eval userid = 'IDUSUARIO' C eval password = 'contrasea' ... C\EXEC SQL C+ CONNECT TO :server IN SHARE MODE user :userid using :password C\END-EXEC
Para obtener ms informacin sobre la sintaxis de la sentencia CONNECT SQL, consulte el Manual de consulta de SQL para la configuracin de DB2.
Esta variable de entorno puede establecerse en el archivo CONFIG.SYS o desde el indicador de mandatos de la sesin. Si ejecuta la aplicacin en un entorno de Windows, puede conectarse a una base de datos de la siguiente manera:
SET DB2DBDFT=LATONA SET DB2USERID=IDUSUARIO SET DB2PASSWORD=contrasea
Estas variables de entorno estn establecidas en el archivo AUTOEXEC.BAT. Nota: Existen algunas diferencias en los nombres de las variables de entorno en funcin de la configuracin de la DB2 instalada. Consulte los manuales de instalacin de DB2.
80
Archivos de disco
En el apartado Parte 3. Especificaciones en la pgina 189 se describe cmo definir los archivos locales y remotos en las diversas especificaciones. En este apartado se describen las consideraciones adicionales si la aplicacin de VisualAge RPG utiliza archivos locales o archivos de bases de datos AS/400.
Archivos locales
A continuacin se facilita un resumen de las restricciones de los archivos locales: v El archivo local no puede ser bloqueado. v Los campos numricos de los archivos locales se escriben y leen tal cual, sin conversin alguna. v Si el programa realiza E/S en un archivo local que no existe, se crea dicho archivo. v Si VisualAge RPG crear el archivo local, los registros de dicho archivo terminan con un salto de lnea de retorno de carro. Si utiliza un archivo local que no contiene saltos de lnea de retorno de carro, la aplicacin VisualAge RPG no podr realizar las operaciones de E/S en este archivo. v Las tramas de bits de un archivo local se leen tal cual en el almacenamiento. Si una trama de bits contiene la representacin binaria de un salto de lnea de retorno de carro (CRLF), el registro que el programa de VisualAge RPG lee, se dividir en dos registros. v Si un archivo local contiene nmeros binarios, los nmeros son intercambiados por bytes.
Archivos de AS/400
Los cdigos de operacin de VisualAge RPG pueden acceder a los archivos de bases de datos lgicos, fsicos de fuente y fsicos de AS/400. Si desea obtener ms
Copyright IBM Corp. 1994, 2000
81
informacin sobre la configuracin de archivos de base de datos de AS/400, consulte el apartado DB2 Universal Database para AS/400 de la categora Bases de datos y sistemas de archivos de Information Center, que se halla en este sitio Web http://publib.boulder.ibm.com/pubs/html/as400/infocenter.htm. Antes de que la aplicacin acceda a los archivos de bases de datos de AS/400, debe establecer el servidor. Para obtener ms informacin sobre cmo configurar un servidor, consulte las publicaciones Iniciacin a VisualAge RPG y CODE/400, SC10-3287-01 (SC09-2625-01) y Programacin con VisualAge para RPG, SC10-3067-02 (SC09-2449-02). Cuando la aplicacin VisualAge RPG accede a un archivo de bases de datos de AS/400, se utiliza un trabajo de servicio DDM para manejar las peticiones de E/S de la base de datos. Se utiliza un nico trabajo de servicio DDM en cada servidor AS/400 distinto donde se abren los archivos de cada aplicacin de VisualAge RPG. Al finalizar la aplicacin, finalizan todos los trabajos de servicio DDM de AS/400.
82
Datos de tipo carcter: Los datos de tipo carcter se convierten de EBCDIC a ASCII y a la inversa. Todos los datos de tipo carcter almacenados en la base de datos de AS/400 deben ser identificados con un EBCDIC CCSID adecuado a fin de que la conversin funcione correctamente. Los datos de tipo carcter se convierten en funcin del CCSID del campo de caracteres y de la pgina de cdigos de la estacin de trabajo ASCII. Si la aplicacin llama a un programa de AS/400 o accede a un rea de datos de AS/400, al convertir los datos se utiliza el CCSID del trabajo de AS/400 que sirve a la llamada o la peticin del rea de datos. Si desea obtener ms informacin sobre la identificacin de los datos de tipo carcter, consulte el apartado DB2 Universal Database para AS/400 de la categora Bases de datos y sistemas de archivos de Information Center, que se halla en este sitio Web http://publib.boulder.ibm.com/pubs/html/as400/infocenter.htm. Tipo de datos grfico: El Tipo de datos grfico contiene todos los caracteres DBCS sin los caracteres SO y SI. Puesto que este es el formato que el sistema espera, se puede utilizar todo el tipo de datos grfico. Nota: Si la aplicacin emite peticiones de E/S de AS/400, deber identificar los campos Grfico de AS/400 con un CCSID de DBCS adecuado a fin de que la conversin de VisualAge RPG funcione satisfactoriamente. Tipos de datos de fecha, hora e indicacin de la hora: La conversin es la misma que para los datos de tipo carcter. No es necesaria la identificacin CCSID explcita para el acceso a la base de datos de AS/400. Tipo de datos numrico con zona: Se convierten los nmeros con zona de modo que puedan visualizarse e imprimirse tanto en el servidor AS/400 como en la estacin de trabajo. Al convertir nmeros con zona EBCDIC negativos a ASCII, la parte de signo del ltimo byte se convierte en x7. Consulte el apartado Formato decimal con zona en la pgina 121. Tipo de datos decimal empaquetado: Al convertir los nmeros EBCDIC empaquetados a ASCII, la parte de signo del nmero empaquetado se convierte en xC si el nmero es positivo y en xD si el nmero es negativo. Consulte el apartado Formato decimal empaquetado en la pgina 119. Tipos de datos binarios: Los campos binarios se reordenan cuando estos datos se envan entre el servidor AS/400 y la estacin de trabajo. Las siguientes conversiones se realizan en los tipos de base de datos de AS/400: Tipos de datos flotantes: Los campos Binario y Flotante son intercambiados por bytes cuando se envan estos datos entre el servidor AS/400 y la estacin de trabajo. Por ejemplo, v Un campo entero de 2 bytes en el servidor AS/400 que contiene 1 2 se convierte en 2 1 en la estacin de trabajo. v Un campo entero de 2 bytes que contiene 2 1 en la estacin de trabajo se convierte en 1 2 en el servidor AS/400.
Captulo 8. Consideraciones sobre archivos
83
v Un campo entero de 4 bytes en el servidor AS/400 que contiene 1 2 3 4 se convierte en 4 3 2 1 en la estacin de trabajo. v Un campo entero de 4 bytes que contiene 4 3 2 1 en la estacin de trabajo se convierte en 1 2 3 4 en el servidor AS/400. Tipo de datos hex y datos de tipo carcter identificados con un CCSID de 65535 La conversin de datos no se produce si el campo de tipo carcter est identificado con un CCSID de 65535 (lo cual implica que no tendr lugar la conversin). Tipos de datos J, O o E: Los tipos de datos J (slo DBCS), O (Datos mezclados) y E (Todos de un solo byte o todos de doble byte) son tratados como campos de tipo carcter en el programa de VisualAge RPG. Los tipos de datos J, O y E deben estar identificados con un CCSID adecuado. No obstante, puesto que puede que contengan caracteres DBCS, son especiales. En el servidor AS/400, los caracteres DBCS para estos tipos de datos van entre los caracteres SO (Shift out) y SI (Shift In). En la estacin de trabajo, la DBCS no va entre los caracteres SO y SI. Al recuperar datos del servidor AS/400, estos caracteres estn deteriorados y el campo de tipo carcter est rellenado con dos blancos de cola adicionales. Al enviar los datos al servidor AS/400, deber asegurarse de que hay suficientes blancos de cola en el campo de tipo carcter de modo que puedan ser sustituidos por el nmero adecuado de caracteres SO y SI que se aadirn al campo DBCS de AS/400. Por ejemplo, supongamos que se crea un campo O (datos mezclados) en la base de datos de AS/400. En la estacin de trabajo, antes de ser escrito en la base de datos de AS/400, este campo contiene lo siguiente.
sbDBsbDBblblblbl Donde sb = Carcter de un solo byte. DB = Carcter de doble byte. bl = Carcter en blanco de un solo byte.
Nota: Los blancos de cola de un solo byte son considerados insignificantes y son sustituidos por los caracteres SO y SI de forma adecuada. Campos de longitud variable: En las peticiones de E/S de AS/400, se reordena la parte Binario cuando se realiza el envo de estos datos entre el servidor AS/400 y la estacin de trabajo. La parte de carcter se convierte basada en el CCSID de campo.
84
Para obtener ms informacin sobre cmo definir la informacin de AS/400, consulte las publicaciones Iniciacin a VisualAge RPG y CODE/400, SC10-3287-01 (SC09-2625-01) y Programacin con VisualAge para RPG, SC10-3067-02 (SC09-2449-02). Slo se puede iniciar un entorno de control de compromiso en un servidor AS/400. Todava puede utilizar el archivo de base de datos AS/400 en otros servidores AS/400. No obstante, estos archivos no se pueden abrir bajo de control de compromiso. Una vez el entorno de control de compromiso se ha iniciado en un servidor, puede abrir los archivos de base de datos AS/400 en dicho servidor mediante la palabra clave COMMIT en la especificacin de archivo de los archivos que desea abrir bajo el control de compromiso. Slo los archivos abiertos bajo el control de compromiso se ven afectados por las posteriores operaciones COMMIT y ROLLBK. Para obtener ms informacin sobre la palabra clave COMMIT, consulte el apartado COMMIT{(rpg_nombre)} en la pgina 221. Una vez efectuados los cambios adecuados asociados a la transaccin, podr comprometer los cambios en la base de datos AS/400 mediante el cdigo de operacin COMMIT o bien podr retrotraer los cambios de la base de datos AS/400 mediante el cdigo de operacin ROLLBK. El control de compromiso finaliza al finalizar la aplicacin de VisualAge RPG. Si hay cambios pendientes en la base de datos AS/400 que no han sido explcitamente comprometidos o retrotrados, cuando termina la aplicacin se produce una operacin de retrotraccin implcita. Puede escribir un programa de modo que la decisin de abrir un archivo bajo el control de compromiso se toma durante la ejecucin. La palabra clave COMMIT en la especificacin de archivo tiene un parmetro que le permite especificar el control de compromiso adicional. Para obtener ms informacin sobre la utilizacin de la palabra clave COMMIT para controlar la apertura de un archivo para el control de compromiso durante la ejecucin, consulte el apartado COMMIT{(rpg_nombre)} en la pgina 221. Comprobacin de nivel: VisualAge RPG da soporte a la comprobacin de nivel entre un programa de VisualAge RPG y los archivos de base de datos AS/400 que se estn utilizando. El compilador de VisualAge RPG proporciona la informacin requerida por la comprobacin de nivel. La comprobacin de nivel se produce en formato de registro cuando se abre el archivo, a menos que especifique LVLCHK(*NO) al crear o modificar el archivo de base de datos AS/400. Nota: Si se produce una comprobacin de nivel, se maneja como un error de E/S. Coma flotante: Los campos de coma flotante no son soportados. Si procesa un archivo AS/400 descrito externamente con campos de coma flotante, la aplicacin de VisualAge RPG no puede acceder a los campos de coma flotante. Cuando cree un nuevo registro, los campos de coma flotante del registro tendrn un valor de cero. Cuando actualice los registros existentes, los campos de coma flotante no se alteran. No puede utilizar un campo de coma flotante como un campo clave. Bloqueo de archivos: El sistema OS/400 permite colocar un estado de bloqueo (exclusivo, exclusivo que permite la lectura, compartido para actualizacin, compartido para no actualizacin o compartido para lectura) en un archivo
Captulo 8. Consideraciones sobre archivos
85
utilizado durante la ejecucin de un trabajo. Los programas de dentro de un trabajo no se ven afectados por los estados de bloqueo de archivo. Un estado de bloqueo de archivo se aplica nicamente cuando un programa en otro trabajo intenta utilizar el archivo simultneamente. Se puede asignar el estado de bloqueo de archivo con el mandato ALCOBJ (Allocate Object) de CL. Si desea obtener ms informacin sobre la asignacin de recursos y los estados de bloqueo, consulte el apartado CL y API de la categora Programacin de Information Center, que se halla en este sitio Web http://publib.boulder.ibm.com/pubs/html/as400/infocenter.htm. El sistema OS/400 coloca los siguientes estados de bloqueo en los archivos de base de datos cuando abre los archivos: v Abierto para INPUT: Estado de bloqueo de Compartido para lectura v Abierto para UPDATE: Estado de bloqueo de Compartido para actualizacin v Abierto para ADD: Estado de bloqueo de Compartido para actualizacin v Abierto para OUTPUT: Estado de bloqueo de Compartido para actualizacin Bloqueo de registros: Cuando se lee un registro de un archivo que ha sido abierto para actualizarlo, se aplica un bloqueo al registro. Otros programas del sistema AS/400 y otras instancias abiertas de la aplicacin de VisualAge RPG del mismo archivo no pueden leer este registro para actualizarlo hasta que se libere el bloqueo de registro. Si el archivo es un archivo de actualizacin, podr leer un registro incluso con el objetivo de efectuar entradas mediante el ampliador de cdigo de operacin (N) en el campo de cdigo de operacin que sigue al nombre del cdigo de operacin. Los siguientes cdigos de operacin hacen que un registro sea bloqueado si no se especifica el ampliador de cdigo de operacin (N): v CHAIN v READ v READE v READP v READPE El bloqueo permanece hasta que da una de las siguientes circunstancias: v El registro se actualiza v El registro se suprime v Se lee otro registro desde el archivo (para entradas o actualizacin) v Se ejecuta una operacin SETLL o SETGT contra el archivo v Se ejecuta una operacin UNLOCK contra el archivo v Cuando se ejecuta contra el archivo una operacin de salida definida por una especificacin de salida sin nombres de campo incluidos Nota: Las operaciones de salida que aaden un registro a un archivo no hacen que se libere el bloqueo del registro. Si el programa intenta leer un registro para actualizarlo y el registro todava est bloqueado por otra instancia de apertura de archivo, la operacin de lectura espera hasta que el registro se desbloquea. Si el tiempo de espera excede el parmetro WAITRCD en el archivo, se produce una excepcin. Si el programa no maneja esta excepcin (RNQ1218), el gestor de errores por omisin toma el control. Tiene la opcin de reintentar la operacin. Esto permite que el programa contine como si no se hubiera producido el tiempo de espera para el bloqueo de registro. Nota: Si el archivo tiene una subrutina INFSR especificada al ejecutar una operacin de E/S en el archivo antes de que el gestor de errores por omisin
86
tome el control, pueden producirse resultados inesperados si la operacin de entrada que se ha reintentado es una operacin secuencial. Esto puede ocurrir si se ha modificado el cursor de archivo.
Archivos de impresora
Las reglas siguientes se aplican a los archivos de impresora: v La longitud de registro para el dispositivo de impresora en una aplicacin de VisualAge RPG debe ser menor que o igual que el ancho de pgina fsico. v Se inserta un salto de pgina automtico cuando el valor de la lnea actual es igual al valor especificado por la palabra clave is FORMLEN(n), donde la n es el nmero de lneas por pgina. Si FORMLEN no se especifica, la longitud de pgina por omisin es de 66 lneas. v Si la impresin finaliza en medio de una pgina del archivo de impresora, automticamente se aade un salto de pgina. Las restricciones siguientes se aplican a los archivos de impresora: v El rea de realimentacin PRINT (para el nmero de pginas y lneas) se actualiza nicamente despus de una operacin POST. v Los cdigos de retorno mayor/menor, las reas de realimentacin de E/S y las reas de realimentacin abiertas no estn soportadas. v Desbordar/traer no est soportado. Sin embargo, cuando el nmero de lneas alcanza el valor especificado por FORMLEN (o el valor por omisin de 66), se crea un salto de pgina. v Puesto que el desbordamiento no est soportado, la rutina *OFL (para las excepciones y errores de archivo) tampoco est soportada. Esto significa que *ROUTINE no se actualiza con este valor en el rea de realimentacin de archivo.
Archivos especiales
Los archivos especiales le permiten especificar un archivo de entrada y/salida que no est directamente soportado por las operaciones de VisualAge RPG. Las operaciones de entrada y salida del archivo estn controladas por una rutina escrita por el usuario. Utilice la palabra clave PROCNAME en las especificaciones de archivo para definir el gestor de archivos especiales. Nota: La rutina escrita por el usuario es una funcin contenida en una Biblioteca de enlace dinmico (DLL). En la Figura 25 en la pgina 88, fspecr es una funcin dentro de un mdulo C que ha sido compilado y enlazado a una aplicacin de VisualAge RPG. Este ejemplo demuestra cmo realizar la E/S local en una estacin de trabajo. Nota: A fin de que el programa de VisualAge RPG se conecte con una DLL, deber crear la DLL que contenga la definicin de la funcin C a la que hace referencia la palabra clave de procedimiento (PROCNAME) en el programa de VisualAge RPG. Cuando construya la aplicacin de VisualAge RPG, deber especificar la lista de bibliotecas (LIB) y/u objetos (OBJ) que contiene todas las funciones a las que la aplicacin llama en el cuaderno Construir.
87
F* --------------------------------------------------------------F* ---------- --- Archivos especiales VRPG --- ---------------------F* --------------------------------------------------------------F* Declaracin de archivo especial. Apertura y cierre explcitos. F dino cf f 18 SPECIAL USROPN PLIST(dinoplist) F PROCNAME('fspecr') F INFDS(info) D* --------------------------------------------------------------D* Las posiciones INFDS- de 38 a 42. D info DS d errinfo 38 42s 0 D* --------------------------------------------------------------D* Utilizado para visualizar indicadores establecidos y valores ledos. D BoxId M STYLE(*INFO) D BUTTON(*OK:*ENTER) D BUTTON(*ABORT:*IGNORE) D* --------------------------------------------------------------D* Campo de entrada asociado al archivo especial. D fieldc S 18 inz ('VRPGisGreat') D* --------------------------------------------------------------D* Parmetro extra definido por el usuario para operaciones de E/S D* de archivos especiales. D mySFparm S 10 inz ('VRPGisGreat') I* --------------------------------------------------------------I* Especificacin de entrada, es decir, fieldc se actualiza en el programa I* de VRPG despus de cada operacin de E/S realizada en el archivo I* especial dino. I dino NS I 1 18 fieldc I*
88
#include <stdlib.h> #include <memory.h> #include <stdio.h> /* --------------------------------------------------------------, | Funcin de archivo especial | '---------------------------------------------------------------*/ * extern void fspecr ( char *option, // Proporcionado por VRPG char *status, // Proporcionado por VRPG char *error, // Proporcionado por VRPG char *area, // Proporcionado por VRPG char *mySFparm) // Proporcionado por usuario { /* --------------------------------------------------------------, | Constantes locales | '---------------------------------------------------------------*/ #define REC_SIZE 18 // Tamao del registro a leer. #define NORMAL_STATUS '0' // Valores del parmetro 'status'. #define ERROR_STATUS '2' #define EOF_STATUS '1' #define OPEN_ERROR 12345 // Valores de actualizacin de 'error' #define READ_ERROR 88888 // tambin usados en el campo *RECORD #define OPTION_ERROR 99999 // en la INFDS. * static FILE *fp ; * int radix = 10 ; // Obligatoria para la funcin '_itoa'. * int a = 0 ; char temp[6]; switch (option[0]) { case 'O' : // Abre localmente el archivo. if ((fp=fopen("special.dat", "rb+")) == NULL) { a = OPEN_ERROR ; // El valor ASCII de un error de apertura _itoa( a, temp, radix ) ; // se establece aqu para la INFDS. memcpy( error, temp, 5 ) ; status[0] = ERROR_STATUS ; // Estado de retorno. } else { status[0] = NORMAL_STATUS ; } * break ; * case 'C' : // Cierre local ... fclose(fp) ; status[0] = NORMAL_STATUS ; break ;
89
case 'R' : // Apertura de archivo local... lectura. fread(area, 1, REC_SIZE, fp) ; if (feof(fp)) { status[0] = EOF_STATUS ; // Archivo ledo y EOF alcanzado. } else if (ferror(fp)) { // Comprobar errores. a = READ_ERROR ; // El equivalente ASCII de error de lectura _itoa( a, temp, radix ) ; // se establece aqu para la INFDS. memcpy( error, temp, 5 ) ; status[0] = ERROR_STATUS ; // Estado de retorno. } else { status[0] = NORMAL_STATUS ; } break ; default : a = OPTION_ERROR ; // Establece el equivalente ASCII de un _itoa( a, temp, radix ) ; // error de opcin para la INFDS. memcpy( error, temp, 5 ) ; status[0] = ERROR_STATUS ; // Estado de retorno. break ; }
* *
return ; * #undef REC_SIZE #undef NORMAL_STATUS #undef ERROR_STATUS #undef EOF_STATUS #undef OPEN_ERROR #undef READ_ERROR #undef OPTION_ERROR }
El ejemplo de la Figura 27 en la pgina 91 ilustra cmo se realizan implcitamente las operaciones OPEN y CLOSE, omitiendo la palabra clave USROPN de las especificaciones de archivo.
90
F* --------------------------------------------------------------F* ---------- --Archivos especiales VRPG --- ---------------F* --------------------------------------------------------------F* Declaracin de archivo especial. Apertura y cierre implcitos. F dino cf f 18 SPECIAL PLIST(dinoplist) F PROCNAME('fspecr') F INFDS(info) D* --------------------------------------------------------------D* Las posiciones INFDS- de 38 a 42. D info DS d errinfo 38 42s 0 D* --------------------------------------------------------------D* Utilizado para visualizar indicadores establecidos y valores de campo. D BoxId M STYLE(*INFO) D BUTTON(*OK:*ENTER) D BUTTON(*ABORT:*IGNORE) D* --------------------------------------------------------------D* Campo de entrada asociado al archivo especial. D fieldc S 18 inz ('VRPGisGreat') D* --------------------------------------------------------------D* Parmetro extra definido por el usuario para operaciones de E/S D* de archivos especiales. D mySFparm S 10 inz ('VRPGisGreat') I* --------------------------------------------------------------I* Especificacin de entrada, es decir, fieldc se actualiza en el programa I* de VRPG despus de cada operacin de E/S realizada en el archivo I* especial dino. I dino NS I 1 18 fieldc I* --------------------------------------------------------------C *INZSR BEGSR C* --------------------------------------------------------------C dinoplist PLIST C PARM mySFparm C EVAL fieldc = 'FIRSTINIT' C FIELDC DSPLY BoxId Reply 9 0 C*--------------------------------------------------------------------C READ dino 9099 C*--------------------------------------------------------------------C N90FIELDC DSPLY BoxId Reply C 90'IND90' DSPLY BoxId Reply C 99'IND99' DSPLY BoxId Reply C*--------------------------------------------------------------------C ENDSR
91
92
Parte 2. Datos
En este apartado se proporciona informacin sobre la utilizacin de datos en un programa: v Captulo 9. Tipos de datos y formatos de datos en la pgina 95 describe los tipos de datos y formatos v Literales en la pgina 139 describe los literales v Captulo 11. Estructuras de datos en la pgina 147 describe las estructuras de datos v Captulo 12. Utilizacin de matrices y tablas en la pgina 157 describe las Matrices y tablas v Captulo 13. Edicin de campos numricos en la pgina 173 describe cmo editar los campos numricos v Captulo 14. Inicializacin de los datos en la pgina 187 describe la inicializacin de datos
93
94
95
Formato interno
El formato interno por omisin de los campos numricos autnomos es decimal empaquetado. El formato interno por omisin de los subcampos numricos de estructura de datos es decimal con zona. Para especificar un formato interno distinto, especifique el formato deseado en la posicin 40 de la especificacin de definicin del campo o subcampo. El formato por omisin de los campos de fecha, hora e indicacin de la hora es *ISO. Por lo general, se recomienda utilizar el formato interno ISO por omisin, especialmente si tiene una mezcla de tipos de formato externo. Para los campos de fecha, hora e indicacin de la hora puede utilizar las palabras clave DATFMT y TIMFMT en la especificacin de control para cambiar el formato interno por omisin, si lo desea, de todos los campos de fecha/hora del programa. Puede utilizar la palabra clave DATFMT o TIMFMT en la especificacin de una definicin para alterar el formato interno por omisin de un campo de fecha/hora individual.
Formato externo
Si tiene campos numricos, de caracteres o de fecha y hora en archivos descritos por programa, puede especificar su formato externo. Los formatos numricos externos son: binario, entero, decimal empaquetado, decimal con zona, sin signo o flotante. El formato externo no afecta al modo en que se procesa un campo. Sin embargo, puede ser capaz de mejorar el rendimiento de las operaciones aritmticas, dependiendo del formato interno especificado. Para obtener ms informacin al respecto, consulte el apartado Consideraciones sobre el rendimiento en la pgina 369.
Para cualquiera de estos campos de Tabla 15, especifique uno de los siguientes formatos numricos externos vlidos: B Binario F Flotante I Entero L Signo a la izquierda P Decimal empaquetado R Signo a la derecha S Decimal con zona U Sin signo El formato externo por omisin para los datos numricos flotantes se llama representacin de pantalla externa. El formato de datos flotantes de 4 bytes es:
96
+n.nnnnnnnE+ee, donde + representa el signo (+ o -) n representa los dgitos de la mantisa e representa los dgitos del exponente
Tenga en cuenta que un valor flotante de 4 bytes ocupa 14 posiciones y un valor flotante de 8 bytes ocupa 23 posiciones. Para otros datos numricos aparte de los flotantes, el formato externo por omisin es decimal con zona. El formato externo de las matrices y las tablas de tiempo de compilacin debe ser decimal con zona, con el signo a la derecha o a la izquierda. Para las matrices y las tablas de tiempo de compilacin de flotantes, los datos de tiempo de compilacin se especifican como un literal numrico o un literal flotante. Cada elemento de una matriz de flotante de 4 bytes ocupa 14 posiciones en el registro fuente; cada elemento de una matriz de flotante de 8 bytes ocupa 23 posiciones. Los campos numricos no flotantes definidos en las especificaciones de entrada, especificaciones de clculo o especificaciones de salida sin definicin correspondiente en una especificacin de definicin se almacenan internamente en formato decimal empaquetado.
Puede utilizarse la palabra clave EXTFMT para especificar los datos de una matriz o tabla en formato UCS-2. Especifique el atributo de datos *VAR en las posiciones 31 a 34 de una especificacin de entrada y en las posiciones 53 a 80 de una especificacin de salida para los datos de carcter, grficos o UCS-2 de longitud variable.
97
MI_CAMPO se halla ubicado ahora en el almacenamiento que empieza en G, por lo que su valor es GHIJK. Si se mueve el puntero de modo que seale a J, el valor de MI_CAMPO pasa a ser JKLMN:
PTR1-------------------. | V ------------------------------------------------------------| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | -------------------------------------------------------------
Si una sentencia EVAL cambia ahora MI_CAMPO por HOLA, el almacenamiento a partir de J sera el siguiente:
PTR1-------------------. | V ------------------------------------------------------------| A | B | C | D | E | F | G | H | I | H | O | L | A | N | O | -------------------------------------------------------------
Utilice la palabra clave BASED de la especificacin de definicin (vase BASED(nombre_puntero_de base) en la pgina 238) para definir un puntero de base para un campo. Los punteros de base tienen el mismo mbito que el campo basado. La longitud del campo de puntero de base debe ser de 4 bytes y debe estar alineada en un lmite de 4 bytes. Debido a este requisito de alineacin de lmites es posible que un subcampo de puntero no siga directamente al campo anterior y que estructuras de datos de mltiples apariciones tengan apariciones no contiguas. Para obtener ms informacin sobre la alineacin de los subcampos, consulte el apartado Alineacin de los subcampos de la estructura de datos en la pgina 148. El valor de inicializacin por omisin para los punteros base es *NULL.
98
Notas: 1. Al codificar los punteros de base, debe estar seguro de que el puntero se ha establecido sobre un almacenamiento suficientemente grande y del tipo correcto para el campo basado. Figura 31 en la pgina 102 muestra algunos ejemplos de cmo no debe codificarse punteros de base. 2. Puede sumar o restar un desplazamiento a un puntero de una expresin, como por ejemplo EVAL ptr = ptr + desplazamiento. Al realizar aritmtica de punteros, debe tener en cuenta que es su responsabilidad asegurarse de que todava apunte al interior del almacenamiento del elemento al que est sealando. En muchos casos, no se emitir ninguna excepcin si seala antes o despus del elemento. Al restar dos punteros para determinar el desplazamiento existente entre ambos, los punteros deben apuntar al mismo espacio o al mismo tipo de almacenamiento. Por ejemplo, puede restar dos punteros que apunten al almacenamiento esttico, dos punteros al almacenamiento automtico o dos punteros dentro del mismo espacio de usuario.
Ejemplos
La Figura 28 en la pgina 100 muestra cmo definir una estructura de datos de base.
99
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ * * Definir una estructura de datos de base, matriz y campo. * Si PTR1 no est definido, el compilador lo definir * implcitamente. * * Tenga en cuenta que antes de que puedan utilizarse estos campos de * base o estructuras, debe establecerse el puntero de base de * modo que seale la ubicacin de almacenamiento correcta. PRT1 * se establecer de modo que seale a una direccin de * almacenamiento vlida antes de que se utilice la estructura * de datos DSbased. * D DSbased DS BASED(PTR1) D Campo1 1 16A D Campo2 2 D D ARRAY S 20A DIM(12) BASED(PTR2) D D Temp_fld S * BASED(PTR3) D D PTR2 * INZ D PTR3 * INZ(*NULL)
El siguiente ejemplo muestra cmo puede sumar y restar desplazamientos a los punteros y determinar tambin la diferencia entre dos punteros expresada como desplazamiento.
100
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+...8 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D.....................................Keywords+++++++++++++++++++++++++++++ * D P1 s * D P2 s * CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... CSRN01++++++++++++++Opcode(E)+Extended Factor 2++++++++++++++++++++++++++++ * * Asignar 20 bytes de almacenamiento para el puntero P1 C ALLOC 20 P1 * Inicializar el almacenamiento con 'abcdefghij' C EVAL %STR(P1:20) = 'abcdefghij' * Establecer P2 para que apunte el noveno bytes de este almacenamiento. C EVAL P2 = P1 + 8 * Mostar que P2 apunta a 'i'. %STR devuelve los datos a los que * apunta el puntero hasta el primer terminador de nulo x'00' * que encuentra, sin incluirlo, pero slo busca la longitud * dada, que en este caso es 1. C EVAL Result = %STR(P2:1) C DSPLY Result 1 * Establecer P2 para que apunte al byte anterior C EVAL P2 = P2 - 1 * Mostrar que P2 apunta a 'h' C EVAL Result = %STR(P2:1) C DSPLY Result * Determinar la distancia entre P1 y P2. (7 bytes) C EVAL Diff = P2 - P1 C DSPLY Diff 5 0 * Liberar el almacenamiento de P1 C DEALLOC P1 C RETURN
La Figura 30 muestra cmo obtener el nmero de das en formato Juliano, en caso de necesitarse una fecha en Juliano.
*..1....+....2....+....3....+....4....+....5....+....6....+....7....+.... HKeywords++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ H DATFMT(*JUL) DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D.....................................Keywords+++++++++++++++++++++++++++++ * D JulDate S D INZ(D'95/177') D DATFMT(*JUL) D JulDS DS BASED(JulPTR) D Jul_yy 2 0 D Jul_sep 1 D Jul_ddd 3 0 D JulDay S 3 0 CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... CSRN01++++++++++++++Opcode(E)+Extended Factor 2++++++++++++++++++++++++++++ * * Establecer el puntero de base para la estructura que * recubre la fecha en Juliano. C EVAL JulPTR = %ADDR(JulDate) * Extraer la porcin correspondiente al da de la fecha en Juliano C EVAL JulDay = Jul_ddd
Al codificar los punteros de base, asegrese de que el puntero est establecido sobre un almacenamiento suficientemente grande y del tipo correcto para el campo
Captulo 9. Tipos de datos y formatos de datos
101
basado. Figura 31 muestra algunos ejemplos de cmo no debe codificarse punteros de base.
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D.....................................Keywords+++++++++++++++++++++++++++++ * D chr10 S 10a based(ptr1) D char100 S 100a based(ptr1) D p1 S 5p 0 based(ptr1) CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... CSRN01++++++++++++++Opcode(E)+Extended Factor 2++++++++++++++++++++++++++++ * * * Establecer ptr1 en la direccin de p1, un campo numrico * Establecer chr10 (basado en ptr1) en 'abc' * Los datos escritos en p1 no sern fiables debido a la * incompatibilidad entre tipos de datos. * C EVAL ptr1 = %addr(p1) C EVAL chr10 = 'abc' * * Establecer ptr1 en la direccin de chr10, un campo de 10 bytes. * Establecer chr100, un campo de 100 bytes, en 100 'x' * 10 bytes se escriben en chr10, y 90 bytes se escriben en otro * almacenamiento, cuya ubicacin se desconoce. * C EVAL ptr1 = %addr(chr10) C EVAL chr100 = *all'x'
Los datos de tipo carcter pueden contener uno o ms caracteres de un solo byte o de doble byte, en funcin del formato especificado. Los campos de tipo carcter, grfico y UCS-2 tambin pueden tener un formato de longitud fija o variable. Los cdigos de operacin que operan en series aceptan datos de tipo carcter. La siguiente tabla resume los distintos formatos de los tipos de datos de tipo carcter.
Tipo de datos de Nmero de bytes tipo carcter Carcter Uno o ms caracteres de un solo byte con una longitud fija o variable. Un carcter de un solo byte con una longitud fija CCSID se asume el CCSID de la estacin de trabajo se asume el CCSID de la estacin de trabajo
Indicador
102
Tipo de datos de Nmero de bytes tipo carcter Grfico Uno o ms caracteres de doble byte con una longitud fija o variable Uno o ms caracteres de doble byte con una longitud fija o variable
CCSID el CCSID de la estacin de trabajo o un CCSID de doble byte vlido definido por el usuario 13488 (UCS-2 versin 2.0)
UCS-2
Para obtener informacin sobre los CCSID de los datos de tipo carcter, consulte el apartado Conversin entre datos de tipo carcter, grfico y UCS-2 en la pgina 111. El valor de inicializacin por omisin para campos de tipo carcter no indicador son blancos. Los indicadores son un tipo especial de datos de caracteres. Los datos de tipo indicador constan del indicador y del campo especificado con la palabra clave COMMIT en la especificacin de descripcin de archivo. Los indicadores tienen todos una longitud de un byte y slo pueden contener los valores de carcter 0 y 1. El valor por omisin de los indicadores es 0.
Formato carcter
El formato carcter de longitud fija tiene, como su nombre indica, una longitud fija de uno o varios bytes. Para obtener informacin sobre el formato carcter de longitud variable, consulte el apartado Formato carcter, grfico y UCS-2 de longitud variable en la pgina 105. Un campo de tipo carcter se define especificando A en la entrada Tipo de datos de la especificacin adecuada. Tambin se puede definir utilizando la palabra clave LIKE en la especificacin de definicin en la que el parmetro sea un campo de tipo carcter. El valor de inicializacin por omisin es espacios en blanco.
Formato indicador
El formato indicador es un tipo especial de datos de carcter. Los indicadores tienen todos una longitud de un byte y slo pueden contener los valores de carcter 0 (desactivado) y 1 (activado). Se suelen utilizar para indicar el resultado de una operacin o para establecer condiciones en (controlar) el proceso de una operacin. El valor por omisin de los indicadores es 0. Un campo de tipo indicador se define especificando N en la entrada Tipo de datos de la especificacin adecuada. Tambin se puede definir utilizando la palabra clave LIKE en la especificacin de definicin en la que el parmetro sea un campo de tipo indicador. As mismo, los campos de tipo indicador quedan definidos de forma implcita incluyendo la palabra clave COMMIT en la especificacin de descripcin de archivo. Las reglas para definir variables de indicador son: v Los indicadores pueden definirse como campos autnomos, subcampos, parmetros de prototipo y valores de retorno de procedimiento.
Captulo 9. Tipos de datos y formatos de datos
103
v Si se define una variable de indicador como tabla o matriz de tiempo de compilacin o de tiempo de preejecucin, los datos de inicializacin deben constar nicamente de ceros y unos. Nota: Si un indicador contiene un valor distinto de 0 o de 1 en tiempo de ejecucin, los resultados sern imprevisibles. v Si se especifica la palabra clave INZ, el valor debe ser 0, *OFF, 1 o bien *ON. v No puede especificarse la palabra clave VARYING para un campo de tipo indicador. Las reglas para utilizar variables de indicador son: v El valor de inicializacin por omisin para campos de tipo indicador es 0. v El cdigo de operacin CLEAR establece una variable de indicador en 0. v Si se aplica la funcin espacio en blanco despus de a una variable de indicador, sta ltima queda establecida en 0. v Si se especifica una matriz de indicadores como resultado de una operacin MOVEA(P), el carcter de relleno ser 0. v Se pueden utilizar indicadores como argumentos de bsqueda all donde la clave externa sea un carcter de longitud 1.
Formato grfico
El formato grfico es una serie de caracteres en la que cada carcter se representa mediante 2 bytes. La diferencia entre los datos grficos de doble byte y los caracteres de un solo byte se muestra en la siguiente figura:
1 byte
1 byte
1 byte
1 car.
1 car.
1 car.
1 car.
1 byte
1 byte
1 byte
1 carcter grfico
1 carcter grfico
La longitud de un campo grfico, en bytes, es dos veces el nmero de caracteres grficos del campo. Si se aade un registro al archivo de base de datos y no se especifican los campos grficos para salida, se colocan espacios en blanco de doble byte en los campos para salida. Los espacios en blanco se colocan en campos de salida en las condiciones siguientes: v Los campos no se especifican para salida en la especificacin de salida. v No se satisfacen los indicadores de condicin para el campo.
104
Los datos grficos pueden tener una longitud fija o variable. El formato grfico de longitud fija es una serie de caracteres con una longitud establecida en la que cada carcter est representado por 2 bytes. Para obtener informacin sobre el formato carcter de longitud variable, consulte el apartado Formato carcter, grfico y UCS-2 de longitud variable. Un campo grfico se define especificando G en la entrada Tipo de datos de la especificacin adecuada. Tambin se puede definir utilizando la palabra clave LIKE en la especificacin de definicin en la que el parmetro sea un campo grfico. El valor de inicializacin por omisin de los datos grficos es el espacio en blanco de doble byte. Su valor hexadecimal depende de la pgina de cdigos instalada en la estacin de trabajo. El valor de *HIVAL es X'FFFF' y el de *LOVAL es X'0000'.
Formato UCS-2
El formato Conjunto Universal de Caracteres (UCS-2) es una serie de caracteres en la que cada carcter se representa mediante 2 bytes. Este juego de caracteres puede codificar los caracteres de muchos idiomas escritos. La longitud de un campo UCS-2, en bytes, es igual a dos veces el nmero de caracteres UCS-2 que tenga el campo. El formato UCS-2 de longitud fija es una serie de caracteres con una longitud establecida en la que cada carcter est representado por 2 bytes. Para obtener informacin sobre el formato UCS-2 de longitud variable, consulte el apartado Formato carcter, grfico y UCS-2 de longitud variable. Un campo UCS-2 se define especificando C en la entrada Tipo de datos de la especificacin adecuada. Tambin se puede definir utilizando la palabra clave LIKE en la especificacin de definicin en la que el parmetro sea un campo UCS-2. El valor de inicializacin por omisin para los datos UCS-2 es X'0020'. El valor de *HIVAL es X'FFFF', de *LOVAL es X'0000' y el valor de *BLANKS es X'0020'. Si desea obtener ms informacin sobre el formato UCS-2, consulte los manuales International Application Development y National Language Support, as como los apartados CL y API de la categora Programacin de Information Center, que se halla en este sitio Web http://publib.boulder.ibm.com/pubs/html/as400/infocenter.htm.
105
La Figura 33 muestra cmo se almacenan los campos de tipo carcter de longitud variable:
longitud actual UNS(5)
carcter-datos CHAR(N)
La Figura 34 muestra cmo se almacenan los campos grficos de longitud variable. Los campos UCS-2 se almacenan de una forma similar.
longitud actual UNS(5)
grfico-datos GRAPHIC(N)
N = longitud mxima declarada = nmero de bytes dobles 2 + 2(N) = nmero total de bytes
Nota: Slo son significativos los datos que llegan hasta la longitud actual, inclusive. Para definir un campo de tipo carcter de longitud variable, especifique A (carcter), G (Grfico) o C (UCS-2) y la palabra clace VARYING en una especificacin de definicin. Tambin se puede definir utilizando la palabra clave LIKE en una especificacin de definicin en la que el parmetro sea un campo de tipo carcter de longitud variable. Se puede hacer referencia a campos externos de longitud variable, en una especificacin de entrada o salida, con el atributo de datos *VAR. El valor de inicializacin por omisin es la serie nula (); un valor con longitud cero. Si desea ver ejemplos de la utilizacin de campos de longitud variable, consulte los apartados: v Utilizacin de campos de longitud variable en la pgina 109 v %LEN (Obtener o establecer longitud) en la pgina 330 v %CHAR (Convertir a datos de tipo carcter) en la pgina 316 v %REPLACE (Sustituir serie de caracteres) en la pgina 335 El formato de longitud variable tambin est disponible para datos de tipo grfico.
106
v La longitud actual puede ser un valor comprendido entre 0 y la longitud mxima declarada del campo. v El campo puede inicializarse con la palabra clave INZ. El valor inicial es el valor exacto especificado y la longitud inicial del campo es la longitud del valor inicial. El campo se rellena con espacios en blanco para su inicializacin, pero dichos espacios no se incluyen en la longitud. v En todos los casos, excepto en el de los subcampos definidos con notacin posicional, la entrada de longitud (posiciones de la 33 a la 39 de las especificaciones de definicin) contiene la longitud mxima del campo sin incluir la longitud de 2 bytes. v En el caso de los subcampos definidos con notacin posicional, la longitud incluye la longitud de 2 bytes. Como resultado de ello, un subcampo de longitud variable puede tener una longitud de 65537 de un solo byte o de 16384 de doble byte para una estructura de datos sin nombre. v No puede especificarse la palabra clave VARYING para una estructura de datos. v En el caso de las matrices de tiempo de preejecucin de longitud variable, los datos de inicializacin del archivo se almacenan con formato variable, incluido el prefijo de longitud de 2 bytes. v Dado que los datos de matriz de tiempo de preejecucin se leen de un archivo y la longitud mxima de registros de los archivos es 32766, el tamao mximo de las matrices de tiempo de preejecucin de longitud variable es de 32764 caracteres de un solo byte o de 16382 caracteres grficos o UCS-2 de doble byte. v Se puede definir una tabla o una matriz de longitud variable con datos de tiempo de compilacin. Los espacios en blanco finales del campo de los datos no son significativos. La longitud de los datos es la posicin del ltimo carcter que no sea un espacio en blanco en el campo. Esto es distinto a la inicializacin de tiempo de preejecucin, ya que el prefijo de longitud no puede almacenarse en los datos de tiempo de compilacin. v En el caso de los datos grficos de tiempo de compilacin, se considera que los espacios en blanco de un solo byte son datos significativos. Los datos de tiempo de compilacin de las tablas y matrices grficas deben rellenarse con espacios en blanco de doble byte. Se considera que los espacios en blanco de un solo byte no son espacios en blanco. v No se puede utilizar *LIKE DEFINE para definir un campo como campo de longitud variable. Lo siguiente es un ejemplo de definicin de campos de tipo carcter de longitud variable:
107
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... * DName+++++++++++ETDsFrom+++To/L+++IDc.Functions++++++++++++++++++++++++++++ * Campos autnomos: D var5 S D var10 S D max_len_a S 5A 10A 32767A VARYING VARYING INZ('0123456789') VARYING
* Matriz de tiempo de preejecucin: D arr1 S 100A VARYING FROMFILE(dataf) * Subcampos de estructura de datos: D ds1 DS D D D * Subcampo definido con notacin de longitud: sf1_5 5A VARYING sf2_10 10A VARYING INZ('0123456789') Subcampo definido con notacin posicional: A(5)VAR sf4_5 101 107A VARYING Subcampos que muestran la representacin interna de VARYING: sf7_25 100A VARYING sf7_len 5I 0 OVERLAY(sf7_25:1) sf7_data 100A OVERLAY(sf7_25:3)
D D D
* Prototipo de procedimiento D Replace PR 32765A VARYING D String 32765A CONSTANT VARYING OPTIONS(*VARSIZE) D FromStr 32765A CONSTANT VARYING OPTIONS(*VARSIZE) D ToStr 32765A CONSTANT VARYING OPTIONS(*VARSIZE) D StartPos 5U 0 VALUE D Replaced 5U 0 OPTIONS(*OMIT)
A continuacin se muestra un ejemplo de definicin de campos de tipo grfico y UCS-2 de longitud variable:
108
* .. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... DName+++++++++++ETDsFrom+++To/L+++IDc.Functions++++++++++++++++ *------------------------------------------------------------* Campos de tipo grfico *------------------------------------------------------------* Campos autnomos: D GRA20 S 20G VARYING D MAX_LEN_G S 16383G VARYING * Matriz de tiempo de preejecucin: D ARR1 S 100G VARYING FROMFILE(DATAF) * Subcampos de estructura de datos: D DS1 DS * Subcampo definido con notacin de longitud: D SF3_20 20G VARYING * Subcampo definido con notacin posicional: G(10)VAR D SF6_10 11 32G VARYING *------------------------------------------------------------* Campos de tipo UCS-2 *------------------------------------------------------------D MAX_LEN_C S 16383C VARYING D FLD1 S 5C INZ(%UCS2('ABCDE')) VARYING D FLD2 S 2C INZ(U'01230123') VARYING D FLD3 S 2C INZ(*HIVAL) VARYING D DS_C DS D SF3_20_C 20C VARYING * Subcampo definido con notacin posicional: C(10)VAR D SF_110_C 11 32C VARYING
109
La operacin PARAM establece la longitud del campo de resultado en la longitud del campo del Factor 2, si se especifica. Las operaciones de formato fijo MOVE, MOVEL, CAT, SUBST y XLATE no cambian la longitud de los campos de resultado de longitud variable. Por ejemplo, si se mueve utilizando MOVE el valor XYZ a un campo de tipo carcter de longitud variable de longitud 10 cuya longitud actual sea 2, la longitud del campo no cambiar y los datos se truncarn.
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D fld 10A VARYING * Se asume que fld tiene una longitud 2 antes de MOVEL. * Tras el primer MOVEL, tendr un valor de 'XY' CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq... C MOVEL 'XYZ' fld * Tras el segundo MOVEL, tendr el valor de '1Y' C MOVEL '1' fld
Nota: Se recomienda la utilizacin de MOVE y MOVEL, al contrario que EVAL, para cambiar el valor de los campos que desee que tengan una longitud temporalmente fija. Un ejemplo de esto sera la elaboracin de un informe con columnas cuyos tamaos puedan variar de un da al otro, pero cuyos tamaos deban ser fijos en cada ejecucin del programa. Cuando se lee un campo desde un archivo (especificaciones de Entrada), la longitud de un campo de longitud variable se establece en la longitud de los datos de entrada. La funcin Blanco Despus de las especificaciones de Salida establece la longitud de un campo de longitud variable en 0. Puede establecer usted mismo la longitud de un campo de longitud variable utilizando la funcin incorporada %LEN en la parte izquierda de una operacin EVAL. Cmo se utiliza la longitud del campo: Cuando se desea utilizar el valor de un campo de longitud variable, se utiliza su longitud actual. El siguiente ejemplo asume que result es un campo de longitud fija con una longitud de 7.
110
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D fld 10A VARYING * Para la siguiente operacin EVAL * Valor de 'fld' Longitud de 'fld' 'result' * -------------------------------------* 'ABC' 3 'ABCxxx ' * 'A' 1 'Axxx ' * '' 0 'xxx ' * 'ABCDEFGHIJ' 10 'ABCDEFG' CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq... C EVAL result = fld + 'xxx' * En la siguiente operacin MOVE, se asume que 'result' * tiene el valor de '.......' antes de MOVE. * Valor de 'fld' Longitud de 'fld' 'result' * -------------------------------------* 'ABC' 3 '....ABC' * 'A' 1 '......A' * '' 0 '.......' * 'ABCDEFGHIJ' 10 'DEFGHIJ' C MOVE fld result
Por qu deben utilizarse campos de longitud variable: La utilizacin de campos de longitud variable para las variables temporales puede aumentar el rendimiento de las operaciones con series, as como facilitar la lectura del cdigo ya que no es necesario guardar la longitud actual del campo en otra variable para la operacin %SUBST, ni utilizar %TRIM para ignorar los blancos adicionales. Si el objetivo de un subprocedimiento es el de manejar datos de tipo serie de distintas longitudes, la utilizacin de campos de longitud variable en los valores de los parmetros y de retorno de los procedimientos con prototipos puede aumentar el rendimiento y la facilidad de lectura de las llamadas y los procedimientos. No ser necesario pasar ningn parmetro de longitud al subprocedimiento para obtener la longitud real del parmetro.
111
puede especificarse utilizando la palabra clave CCSID en la especificacin de definicin. El CCSID de los campos UCS-2 descritos externamente proviene del archivo externo. Nota: Los campos UCS-2 se definen en DDS especificando un tipo de datos G y un CCSID de 13488. El CCSID de los datos de tipo grfico toma por omisin el valor especificado en la palabra clave CCSID(*GRAPH) de la especificacin de control. El CCSID de los campos de tipo grfico descritos por el programa puede especificarse utilizando la palabra clave CCSID en la especificacin de definicin. El CCSID de los campos de tipo grfico descritos externamente proviene del archivo externo.
Datos de fecha
Los campos de fecha tienen un tamao y formato predeterminado. Pueden definirse en la especificacin de definicin. Son necesarios los ceros iniciales y de cola para todos los datos de fecha. Las constantes o variables de fecha utilizadas en comparaciones o asignaciones no han de estar en el mismo formato ni utilizar los mismos separadores. Las fechas utilizadas para operaciones de E/S, como por ejemplo campos de entrada, campos de salida o campos de clave se convierten (si es necesario) al formato necesario para la operacin. El formato interno por omisin para variables de fecha es *ISO. Este formato interno por omisin se puede alterar temporalmente de modo global mediante la palabra clave de especificacin de control DATFMT y de modo individual mediante la palabra clave de especificacin de definicin DATFMT. La de 1. 2. 3. jerarqua utilizada al determinar el formato interno y el separador de un campo fecha proviene de: La palabra clave DATFMT especificada en la especificacin de definicin La palabra clave DATFMT especificada en la especificacin de control *ISO
Existen tres clases de formatos de datos de fecha, segn cul sea el rango de aos que pueden representarse. Esto conlleva la posibilidad de que se produzca una condicin de desbordamiento o de subdesbordamiento cuando el resultado de una operacin es una fecha que est fuera del rango vlido del campo de destino. Los formatos y los rangos son los siguientes:
Nmero de dgitos del ao 2 (*YMD, *DMY, *MDY, *JUL) 3 (*CYMD, *CDMY, *CMDY) 4 (*ISO, *USA, *EUR, *JIS, *LONGJUL) Rango de aos De 1940 al 2039 De 1900 al 2899 De 0001 a 9999
La Tabla 16 en la pgina 113 lista los formatos de los datos de fecha y sus separadores: Si desea ver ejemplos de cmo se puede codificar campos de fecha, consulte los ejemplos dados en: v Operaciones de fecha en la pgina 377 v Cmo mover los datos de fecha y hora en la pgina 386
112
v v v v v
ADDDUR (Aadir duracin) en la pgina 393 MOVE (Mover) en la pgina 468 EXTRCT (Extraer fecha/hora/indicacin de la hora) en la pgina 452 SUBDUR (Restar duracin) en la pgina 543 TEST (Comprobar fecha/hora/indicacin de la hora) en la pgina 549
Tabla 16. Separadores y formatos de fecha definidos con RPG correspondientes al tipo de datos Fecha
Nombre de formato Descripcin Formato Separadores (separador por vlidos omisin) Longitud Ejemplo
Formatos de ao de 2 dgitos *MDA *DMA *AMD *JUL Mes/Da/Ao Da/Mes/Ao Ao/Mes/Da Juliana mm/dd/aa dd/mm/aa aa/mm/dd aa/ddd / - . , & / - . , & / - . , & / - . , & 8 8 8 6 01/15/96 15/01/96 96/01/15 96/015
Formatos de ao de 4 dgitos *ISO International Standards Organization Estndar EE.UU. IBM Estndar europeo IBM aaaa-mm-dd 10 1996-01-15
mm/dd/aaaa dd.mm.aaaa
/ . -
10 10 10
La tabla siguiente lista los valores *LOVAL, *HIVAL y los valores por omisin de todos los formatos de fecha:
Tabla 17. Valores de fecha
Nombre formato Descripcin *LOVAL *HIVAL Valor por omisin
Formatos de ao de 2 dgitos *MDA *DMA *AMD *JUL Mes/Da/Ao Da/Mes/Ao Ao/Mes/Da Juliana 01/01/40 01/01/40 40/01/01 40/001 12/31/39 31/12/39 39/12/31 39/365 01/01/40 01/01/40 40/01/01 40/001
Formatos de ao de 4 dgitos *ISO *USA *EUR *JIS International Standards Organization Estndar EE.UU. IBM Estndar europeo IBM Estndar industrial japons era cristiana 0001-01-01 01/01/0001 01.01.0001 0001-01-01 9999-12-31 12/31/9999 31.12.9999 9999-12-31 0001-01-01 01/01/0001 01.01.0001 0001-01-01
113
Separadores
Al codificar un formato de fecha en una operacin MOVE, MOVEL o TEST, los separadores son opcionales para los campos de caracteres. Para indicar que no hay separadores, especifique el formato seguido de un cero. Para obtener ms informacin sobre cmo codificar formatos de fecha sin separadores, consulte los apartados MOVE (Mover) en la pgina 468, MOVEL (Mover a la izquierda) en la pgina 489 y TEST (Comprobar fecha/hora/indicacin de la hora) en la pgina 549.
Formatos de ao de 3 dgitos(1.) *CYMD *CMDY *CDMY Siglo Ao/Mes/Da Siglo Mes/Da/Ao Siglo Da/Mes/Ao saa/mm/dd smm/dd/aa sdd/mm/aa / - . , & / - . , & / - . , & 9 9 9 101/04/25 104/25/01 125/04/01
Formatos de ao de 4 dgitos *LONGJUL Notas: 1. Los valores vlidos del carcter que indica el siglo, s, son: 's' Aos ----------------------0 1900-1999 1 2000-2099 . . . . . . 9 2800-2899 Juliana larga aaaa/ddd / - . , & 8 2001/115
Los separadores son opcionales para los campos de caracteres en el formato *CYMD. Para indicar que no hay separadores puede especificar *CYMD0.
114
v v v v
entero en la pgina 118 decimal empaquetado en la pgina 119 sin signo en la pgina 120 decimal con zona en la pgina 121
Formato binario
El formato binario significa que el signo (positivo o negativo) es el bit ms a la izquierda del campo y que el valor entero son los bits restantes del campo. Los nmeros positivos tienen un cero en el bit de signo; los nmeros negativos tienen un 1 en el bit de signo y estn en forma de complemento de dos. En formato binario, cada campo debe tener una longitud de 2 4 bytes. Un campo binario puede tener una longitud entre uno y nueve dgitos y puede definirse con posiciones decimales. Si la longitud del campo es de uno a cuatro dgitos, el compilador presupone una longitud de campo binario de 2 bytes. Si la longitud del campo es de cinco a nueve dgitos, el compilador presupone una longitud de campo binario de 4 bytes.
115
v Campo de tabla o matriz binaria: Especifique una B en la posicin 40 de las especificaciones de definicin. El formato externo para las matrices y tablas de tiempo de compilacin no debe ser un formato
3 bytes
0011
0000
0011
1000
5 bytes
+ 4 + 2 + 1 = 8191 1 1 1
1 2 bytes
Si se lee 8191 en el almacenamiento como campo decimal con zona, ocupa 4 bytes. Si se convierte al formato decimal empaquetado, ocupa 3 bytes. Cuando se vuelve a convertir en formato decimal con zona, ocupa 5 bytes.
116
Para obtener el valor numrico de un nmero binario positivo, sume los valores de los bits que estn activados (1) sin incluir el bit de signo. Para obtener el valor numrico de un nmero binario negativo, sume los valores de los bits desactivados (0) ms uno (no se incluye el bit de signo).
Formato flotante
El formato flotante consta de dos partes: v la mantisa v el exponente El valor de un campo de coma flotante es el resultado de multiplicar la mantisa por 10 elevado a la potencia del exponente. Por ejemplo, si 1.2345 es la mantisa y 5 es el exponente, entonces el valor del campo de coma flotante es:
1.2345 * (10 ** 5) = 123450
Puede definir un campo de coma flotante especificando F en la entrada de tipo de datos de la especificacin apropiada. Las posiciones decimales deben dejarse en blanco. Sin embargo, se considera que los campos de coma flotante tienen posiciones decimales. Por tanto, las variables flotantes no pueden utilizarse all dnde se necesita un valor numrico sin posiciones decimales, como un ndice de matriz, un ndice de bucle, etc.. El valor CLEAR y de inicializacin por omisin para un campo de coma flotante es 0E0. La longitud de un campo de coma flotante se define en trminos del nmero de bytes. Debe especificarse como 4 u 8 bytes. Los rangos de los valores permitidos para un campo de coma flotante positivo son:
Longitud de campo 4 bytes 8 bytes Mnimo valor permitido 1.175 494 4 E-38 2.225 073 858 507 201 E-308 Mximo valor permitido 3.402 823 5 E+38 1.797 693 134 862 315 E+308
Nota: Los valores negativos tienen el mismo rango, pero con un signo negativo. Puesto que las variables de coma flotante representan valores cientficos, un valor numrico almacenado en una variable flotante podr no representar exactamente el mismo valor que representara en una variable empaquetada. Las variables flotantes no deben utilizarse para representar nmeros exactamente hasta un nmero determinado de decimales, tales como cantidades monetarias.
117
v Visualizacin y entrada de valores flotantes utilizando el cdigo de operacin DSPLY. v Resultado de la funcin incorporada %EDITFLT. Salida: Al sacar valores flotantes, la representacin externa utiliza un formato similar a los literales flotantes, excepto que: v Los valores se escriben siempre con el carcter E y los signos para la mantisa y el exponente. v Los valores tienen 14 23 caracteres (para 4F y 8F respectivamente). v Los valores estn normalizados. Es decir, la coma decimal figura inmediatamente a continuacin del dgito ms significativo. v El carcter separador decimal es un punto o una coma dependiendo del parmetro para la palabra clave de especificacin de control DECEDIT. A continuacin se dan algunos ejemplos de cmo se presentan los valores flotantes:
+1.2345678E-23 -8.2745739E+03 -5.722748027467392E-123 +1,2857638E+14
si se especifica DECEDIT(',')
Entrada: Al entrar valores flotantes, el valor se especifica como un literal flotante. No es necesario normalizar o ajustar el valor en el campo. Cuando los valores flotantes se definen como datos de inicializacin de matriz/tabla, se especifican en campos de 14 23 caracteres (para 4F y 8F respectivamente). Tenga en cuenta lo siguiente acerca de los campos flotantes: v La alineacin de los campos flotantes puede ser deseable para mejorar el rendimiento del acceso de los subcampos flotantes. Puede utilizar la palabra clave ALIGN para alinear los subcampos flotantes definidos en una especificacin de definicin. Los subcampos flotantes de 4 bytes se alinean sobre un lmite de 4 bytes y los subcampos flotantes de 8 bytes se alinean sobre un lmite de 8 bytes. Para obtener ms informacin sobre la alineacin de los subcampos flotantes, consulte el apartado ALIGN en la pgina 237. v No est permitido ajustar la longitud cuando se utiliza la palabra clave LIKE para definir un campo como campo flotante.
Formato entero
El formato entero es parecido al formato binario con dos excepciones: v El formato entero acepta el rango completo de valores binarios v El nmero de posiciones decimales para un campo entero es siempre cero. Un campo entero se define especificando I en la entrada Tipo de datos de la especificacin adecuada. Tambin puede definir un campo entero utilizando la palabra clave LIKE en una especificacin de definicin en la que el parmetro es un campo entero. La longitud de un campo entero se define en trminos del nmero de dgitos; puede tener una longitud de 3, 5, 10 o 20 dgitos. Un campo de 3 dgitos ocupa 1 byte de almacenamiento; un campo de 5 dgitos ocupa 2 bytes de almacenamiento; un campo de 10 dgitos ocupa 4 bytes;un campo de 20 dgitos ocupa 8 bytes. El rango de valores permitido para un campo entero depende de la longitud. Longitud de campo Rango de valores permitidos Entero de 3 dgitos De -128 a 127
118
Entero de 5 dgitos De -32768 a 32767 Entero de 10 dgitos De -2147483648 a 2147483647 Entero de 20 dgitos De -9223372036854775808 a 9223372036854775807 Tenga en cuenta lo siguiente acerca de los campos enteros: v La alineacin de los campos enteros puede ser deseable para mejorar el rendimiento del acceso de los subcampos flotantes. Puede utilizar la palabra clave ALIGN para alinear subcampos enteros definidos en una especificacin de definicin. Los subcampos enteros de 2 bytes se alinean en un lmite de 2 bytes y los subcampos enteros de 4 bytes se alinean a lo largo de un lmite de 4 bytes; los subcampos enteros de 8 bytes se alinean a lo largo de un lmite de 8 bytes. Para obtener ms informacin sobre la alineacin de los subcampos enteros, consulte el apartado ALIGN en la pgina 237. v Si la palabra clave LIKE se utiliza para definir un campo como un campo entero, la entrada Longitud puede contener un ajuste de longitud en trminos de nmero de dgitos. El valor de ajuste debe ser tal que el nmero resultante de dgitos para el campo sea 3, 5, 10 o 20.
7 0
Byte
En la Figura 37 en la pgina 116 se muestra que el nmero decimal 8191 tiene el aspecto de tener formato decimal empaquetado. Para un archivo descrito por programa: v Especifique P en la posicin 36 de las especificaciones de entrada para entrada decimal empaquetada Especifique P en la posicin 52 de las especificaciones de salida para salida decimal empaquetada. Esta posicin debe estar en blanco si se especifica edicin. Especifique P en la posicin 40 de las especificaciones de definicin para matrices y tablas de decimal empaquetado. El formato externo para matrices y tablas de tiempo de compilacin no puede ser formato decimal empaquetado.
119
Para un archivo descrito externamente, el formato de datos es el indicado en las especificaciones de descripcin de datos.
Esta frmula le da el nmero mximo de dgitos que puede representar en formato decimal empaquetado; el lmite superior es 30. Los campos empaquetados pueden tener una longitud mxima de 16 bytes. En la Tabla 19 se muestran los equivalentes empaquetados para campos decimales con zona con un mximo de 30 dgitos de longitud:
Tabla 19. Equivalentes empaquetados para los campos decimales con zona de hasta 30 dgitos
Longitud decimal con zona en dgitos 1 2, 3 4, 5 . . . . . . 15 16 Nmero de bytes utilizado en el campo decimal empaquetado 1 2 3 . . .
28, 29 30
Nota: Slo se permiten 30 dgitos. Si utiliza la notacin posicional para campos empaquetados de 16 bytes, debe utilizar la palabra clave PACKEVEN; de lo contrario debe definir el campo como de 30 dgitos. Por ejemplo, un campo de entrada ledo en formato decimal empaquetado tiene una longitud de cinco bytes (como se especifica en las especificaciones de descripcin de datos o de entrada). El nmero de dgitos de este campo es igual a 2(5) 1 9. Por lo tanto, cuando se utiliza el campo en las especificaciones de clculo, el campo de resultado debe tener una longitud de nueve posiciones. La palabra clave PACKEVEN de la especificacin de definicin puede utilizarse para indicar cul de los dos tamaos posibles quiere cuando especifica un campo empaquetado utilizando posiciones inicial y final en lugar del nmero de dgitos.
120
Un campo sin signo se define especificando U en la entrada Tipo de datos de la especificacin adecuada. Tambin puede definir un campo sin signo utilizando la palabra clave LIKE en la especificacin de definicin en la que el parmetro sea un campo sin signo. La longitud de un campo sin signo se define en trminos del nmero de dgitos; puede tener una longitud de 3, 5, 10 o 20 dgitos. Un campo de 3 dgitos ocupa 1 byte de almacenamiento; un campo de 5 dgitos ocupa 2 bytes de almacenamiento; un campo de 10 dgitos ocupa 4 bytes;un campo de 20 dgitos ocupa 8 bytes. El rango de valores permitido para un campo sin signo depende de la longitud.
Longitud de campo Entero sin signo de 3 dgitos 5 dgitos sin signo 10 dgitos sin signo 20 dgitos sin signo Rango de valores permitidos De 0 a 255 0 a 65535 0 a 4294967295 De 0 a 18446744073709551615
Para obtener informacin sobre otras consideraciones acerca de la utilizacin de campos sin signo, incluyendo la informacin sobre la alineacin, consulte el apartado Formato entero en la pgina 118.
La parte de zona del byte situado ms a la derecha indica el signo (positivo o negativo) del nmero decimal. Todos los nmeros decimales con zona utilizan signos preferidos: hexadecimal 3 para nmeros positivos y hexadecimal 7 para nmeros negativos. Adems, estn soportados los signos siguientes: hexadecimal 0, 1, 2, 8, 9, A, B para nmeros positivos y hexadecimal 4, 5, 6, C, D, E, F para nmeros negativos. En el formato decimal con zona, cada dgito de un nmero decimal incluye una parte de zona; sin embargo, slo la parte de zona situada ms a la derecha sirve como signo. La Figura 37 en la pgina 116 muestra cmo aparece el nmero 8191 en formato decimal con zona. Debe tener en cuenta el cambio de longitud del campo cuando codifique la posicin final de las posiciones 40 a 43 de las especificaciones de salida y la salida del campo ha de ser en formato empaquetado. Para saber la longitud del campo una vez se ha empaquetado, utilice la frmula siguiente:
121
n Longitud de campo= 2 + 1
. . . siendo n = el nmero de dgitos en el campo decimal con zona. (No se tiene en cuenta el resto de la divisin.)
En un archivo descrito por programa, se especifica el formato decimal con zona mediante un blanco en la posicin 36 de las especificaciones de entrada, en la posicin 52 de las especificaciones de salida o en la posicin 40 de las especificaciones de definicin. En un archivo descrito externamente, el formato de datos se especifica en la posicin 35 de las especificaciones de descripcin de datos. Puede especificar un formato de signo alternativo para el formato decimal con zona. En el formato de signo alternativo, el campo numrico va precedido o seguido inmediatamente por un signo + o . Un signo ms es un hexadecimal 2B y un signo menos es un hexadecimal 2D. Cuando se especifica un formato de signo alternativo, la longitud de campo (especificada en las especificaciones de entrada) debe incluir una posicin adicional para el signo. Por ejemplo, si un campo tiene una longitud de 5 dgitos y se especifica el formato de signo alternativo, debe especificarse una longitud de 6 posiciones.
122
Con ciertas operaciones aritmticas puede ser importante que el valor utilizado sea un entero. Algunos ejemplos en los que el rendimiento puede mejorarse incluyen los clculos de ndices de matrices y los argumentos para la funcin incorporada %SUBST. v Por omisin se realiza una aritmtica de 4 bytes. El compilador slo realiza una aritmtica de 8 bytes si por lo menos un operando es un entero de 8 bytes. Desde el punto de vista del rendimiento, la aritmtica de 8 bytes es cara y debe evitarse en lo posible. v Se interacta con rutinas escritas en otros lenguajes que soportan un tipo de datos entero, tal como ILE C. v Se utilizan campos en reas de realimentacin definidas como enteros y que pueden contener valores superiores a 9999 999999999. Debe especificar los formatos empaquetado, con zona y binario para los campos cuando: v Se utilizan valores que implican decimales, tales como valores monetarios v Se manipulan valores que tienen ms de 19 dgitos v Es importante asegurar un nmero especfico de dgitos para un campo Debe especificar el formato flotante para los campos cuando: v Se necesita la misma variable para retener valores muy grandes y/o muy pequeos que no pueden representarse en valores empaquetados o por zonas. Nota: Es ms probable que se produzca un desbordamiento con operaciones aritmticas realizadas utilizando el formato entero o sin signo, especialmente cuando la aritmtica de enteros se realiza en expresiones de formato libre. Esto es as porque los resultados intermedios se guardan en un formato entero o sin signo en lugar de en un campo decimal temporal de tamao suficiente.
123
2 0010
4 0010 1100
Formato binario:
Signo positivo
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 1 0 1
0 1 0 0
0 0 1 0
1 0 0 0
4 bytes
0 1 0 1
0 1 0 0
0 0 1 0
1 0 0 0
2 bytes
0 1 0 1
0 1 0 0
0 0 1 0
1 0 0 0
2 bytes
124
v Para obtener el valor numrico de un nmero entero o binario positivo, aada los valores de los bits activados (1), pero no incluya el bit de signo (si lo hay). Para un nmero sin signo, aada los valores de los bits activados, incluyendo el bit situado ms a la izquierda. v El valor 21544 no puede representarse en un campo binario de 2 bytes, incluso aunque slo utilice bits en los dos bytes de orden inferior. Un campo binario de 2 bytes slo puede retener 4 dgitos y 21544 tiene 5 dgitos. La Figura 38 muestra el nmero -21544 en formato entero.
Signo negativo
1 0 1 0
1 0 1 1
1 1 0 1
1 0 0 0
2 bytes
Nota: La arquitectura de la estacin de trabajo almacena los formatos binarios, enteros y sin signo en la memoria del programa con los bytes en orden invertido. Este mecanismo de almacenamiento afectar al valor de los subcampos de caracteres utilizados para recubrir subcampos para estos formatos.
125
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D* D* Definir un puntero base e inicializarlo a la direccin de la estructura D* de datos My_Struct. D* D My_struct DS D My_array 10 DIM(50) D D Ptr1 S 4* INZ(%ADDR(My_Struct)) D* D* O fijar por omisin la longitud en 4, si no se ha definido la longitud D* D Ptr1 S * INZ(%ADDR(My_Struct)) D* D* Definir un campo de puntero de procedimiento e inicializarlo en NULL D* D Ptr1 S 4* PROCPTR INZ(*NULL) D* D* Definir un campo de puntero de procedimiento e inicializarlo a la D* direccin del procedimiento My_Proc. D* D Ptr1 S 4* PROCPTR INZ(%PADDR(My_Proc)) D* D* Definir punteros en una estructura de datos de varias apariciones y D* correlacionar el almacenamiento. D* DDataS DS OCCURS(2) D ptr1 * D ptr2 * D Switch 1A D* D* La correlacin de almacenamiento ser: D* D* DataS
* * * * * * * * * * * * * * * * *
Datos de hora
Los campos de hora tienen un tamao y formato predeterminado. Pueden definirse en la especificacin de definicin. Son necesarios los ceros iniciales y de cola para todos los datos de hora.
126
Las constantes o variables de hora utilizadas en las comparaciones o asignaciones no han de estar en el mismo formato ni utilizar los mismos separadores. Las horas se utilizan en operaciones de E/S donde los campos de entrada, los campos de salida o los campos de clave se convierten (si es necesario) al formato necesario para la operacin. El formato interno por omisin para variables de hora es *ISO. Este formato interno por omisin se puede alterar temporalmente de modo global mediante la palabra clave de especificacin de control TIMFMT y de modo individual mediante la palabra clave de especificacin de definicin TIMFMT. La de 1. 2. 3. jerarqua utilizada al determinar el formato interno y el separador de un campo hora proviene de: La palabra clave TIMFMT indicada en la especificacin de definicin La palabra clave TIMFMT indicada en la especificacin de control. *ISO
Si desea ver ejemplos de cmo se puede codificar campos de hora, consulte los ejemplos dados en: v Operaciones de fecha en la pgina 377 v Cmo mover los datos de fecha y hora en la pgina 386 v ADDDUR (Aadir duracin) en la pgina 393 v MOVE (Mover) en la pgina 468 v SUBDUR (Restar duracin) en la pgina 543 v TEST (Comprobar fecha/hora/indicacin de la hora) en la pgina 549 La tabla siguiente lista los formatos de los datos de hora:
Tabla 20. Separadores y formatos del tipo de datos Hora
Nombre Descripcin de formato *HMS *ISO *USA Horas:Minutos:Segundos International Standards Organization Estndar EE.UU. IBM. AM y PM pueden ser cualquier combinacin de maysculas y minsculas Estndar europeo IBM Estndar industrial japons era cristiana Formato Separadores Longitud Ejemplo con vlidos separador por omisin hh:mm:ss hh.mm.ss hh:mm AM o hh:mm PM hh.mm.ss hh:mm:ss :.,& . : 8 8 8 14:00:00 14.00.00 02:00 PM
*EUR *JIS
. :
8 8
14.00.00 14:00:00
La tabla siguiente lista los valores *LOVAL, *HIVAL y los valores por omisin para todos los formatos de hora:
127
*EUR *JIS
00.00.00 00:00:00
24.00.00 24:00:00
00.00.00 00:00:00
Separadores
Al codificar un formato de hora en una operacin MOVE, MOVEL o TEST, los separadores son opcionales para los campos de caracteres. Para indicar que no hay separadores, especifique el formato seguido de un cero. Para obtener ms informacin sobre cmo codificar los formatos de hora sin separadores, consulte el apartado MOVE (Mover) en la pgina 468.
Para los literales de indicacin de la hora son opcionales los microsegundos (.mmmmmm) y si no se suministran se rellenarn por la derecha con ceros. Son necesarios los ceros iniciales en todos los datos de indicacin de la hora. El valor de inicializacin por omisin para una indicacin de la hora es la medianoche del 1 de enero del 0001 (0001-01-01-00.00.00.000000). El valor *HIVAL para una indicacin de la hora es 9999-12-31-24.00.00.000000. De forma similar, el valor *LOVAL para la indicacin de la hora es 0001-01-01-00.00.00.00000.
Separadores
Al codificar el formato de indicacin de la hora en una operacin MOVE, MOVEL o TEST, los separadores son opcionales para los campos de caracteres. Para indicar que no hay separadores, especifique *ISO0. Para ver un ejemplo de cmo utilizar *ISO sin separadores, consulte el apartado TEST (Comprobar fecha/hora/indicacin de la hora) en la pgina 549.
128
2. Slo entrada, ALWNULL(*INPUTONLY) - leer registros con valores nulos para acceder a los datos de los campos nulos. 3. No, ALWNULL(*NO)- no procesar registros con valores nulos. Nota: En un archivo descrito por programa, una valor nulo en el registro siempre causa un error de correlacin de datos, a pesar del valor que se especifique en la opcin Permitir valores nulos o en la palabra clave ALWNULL. Para obtener ms informacin sobre la especificacin de opciones de compilador, consulte la publicacin Iniciacin a VisualAge RPG y CODE/400, SC10-3287-01 (SC09-2625-01).
Soporte controlado por el usuario para campos con posibilidad de nulos y campos de clave
Cuando un archivo descrito externamente contiene campos con posibilidad de nulos y se especifica la opcin Control de usuario o ALWNULL(*USRCTL), puede hacer lo siguiente: v Leer, grabar, actualizar y suprimir registros con valores nulos de archivos de base de datos descritos externamente. v Recuperar y posicionarse en registros con claves nulas utilizando operaciones por clave, especificando un indicador en el factor 2 de KFLD asociado al campo. v Determinar si un campo con posibilidad de nulos es realmente nulo utilizando la funcin incorporada %NULLIND en la parte derecha de una expresin. v Establecer que un campo con posibilidad de nulos sea nulo para la salida o actualizacin utilizando la funcin incorporada %NULLIND en la parte izquierda de una expresin. Tiene la responsabilidad de asegurarse de que los campos que contienen valores nulos se utilicen correctamente en el programa. Por ejemplo, si utiliza un campo con posibilidad de nulos como factor 2 de una operacin MOVE, debe comprobar primero si es nulo antes de realizar la operacin MOVE, de lo contrario puede corromper el valor del campo de resultado. Tambin debe tener cuidado al enviar un campo con posibilidad de nulos a un archivo que no tiene el campo definido como con posibilidad de nulos, por ejemplo: un archivo PRINTER o descrito por programa. Nota: El valor del indicador de nulos para un campo con posibilidad de nulos slo se tiene en cuenta para estas operaciones: entrada, salida y posicionamiento de archivos. A continuacin, se proporcionan algunos ejemplos de operaciones en las que el indicador de nulos no se tiene en cuenta: v La operacin DSPLY de un campo con posibilidad de nulos muestra el contenido del campo aunque el indicador de nulos est activado. v Si traslada un campo con posibilidad de nulos a otro campo con posibilidad de nulos y el campo de factor 2 tiene el indicador de nulos activado, el campo de resultado obtendr los datos del campo de factor 2. El indicador de nulos correspondiente para el campo de resultado no estar activado. v Las operaciones de comparacin, incluyendo SORTA y LOOKUP, con campos con posibilidad de nulos no tienen en cuenta los indicadores de nulos. Se considera que un campo tiene posibilidad de nulos si tiene posibilidad de nulos en cualquier registro de base de datos descrito externamente y no est definido como una constante en el programa.
129
Nota: Si el archivo utilizado para una estructura de datos descrita externamente tiene campos definidos con posibilidad de nulos, el atributo nulo no se utiliza al definir el subcampo VARPG. Cuando un campo tiene la consideracin de campo con capacidad de nulos en un programa VARPG, hay un indicador de nulos asociado al campo. Tenga en cuenta lo siguiente: v Si el campo es una estructura de datos de varias apariciones o una tabla, se asociar al campo una matriz de indicadores de nulos. Cada indicador de nulos corresponde a una aparicin de la estructura de datos o elemento de la tabla. v Si el campo es un elemento de matriz, se considerar que toda la matriz tiene posibilidad de nulos. Se asociar una matriz de indicadores de nulos a la matriz, cada indicador de nulos corresponder a un elemento de la matriz. v Si el campo es un elemento de un subcampo de una matriz de una estructura de datos de varias apariciones, se asociar una matriz de indicadores de nulos a la matriz para cada aparicin de la estructura de datos. Los indicadores de nulos se inicializan como ceros durante la inicializacin del programa y de este modo los campos con posibilidad de nulos no contienen valores nulos cuando el programa arranca la ejecucin.
130
Durante una operacin de salida a un archivo de base de datos descrito externamente, si el archivo contiene campos considerados como campos con posibilidad de nulos en el programa pero sin posibilidad de nulos en el archivo, no se utilizarn los indicadores de nulos asociados a estos campos con posibilidad de nulos. La Figura 40 muestra cmo leer, grabar y actualizar registros con valores nulos cuando se selecciona la opcin Control de usuario o la palabra clave ALWNULL(*USRCTL).
H* H* Especificar la palabra clave ALWNULL(*USRCTL) en una especificacin H* de control o compilar el programa VARPG con la opcin H* Control de usuario. H* HKeywords++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ H* H ALWNULL(*USRCTL) F* F* ARCHDISCO contiene un registro REC con 2 campos: FLD1 y FLD2 F* Tanto FLD1 como FLD2 tienen posibilidad de nulos. F* FFilename++IPEASFRlen+LKlen+AIDevice+.Keywords++++++++++++++++++++++++++ F* FARCHDISCO UF A E DISK CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq. C* C* Leer el primer registro. C* Actualizar el registro con nuevos valores para los campos que no C* son nulos. C READ REC 10 C IF NOT %NULLIND(Fld1) C MOVE 'FLD1' Fld1 C ENDIF C IF NOT %NULLIND(Fld2) C MOVE 'FLD2' Fld2 C ENDIF C UPDATE REC C* C* Leer otro registro. C* Actualizar el registro para que todos los campos sean nulos. C* No hay necesidad de establecer los valores de los campos porque C* se ignorarn. C READ REC 10 C EVAL %NULLIND(Fld1) = *ON C EVAL %NULLIND(Fld2) = *ON C UPDATE REC C* C* Grabar un nuevo registro donde Fld 1 es nulo y Fld 2 no es nulo. C* C EVAL %NULLIND(Fld1) = *ON C EVAL %NULLIND(Fld2) = *OFF C EVAL Fld2 = 'Valor nuevo' C WRITE REC
131
La Figura 41 ilustra cmo se utilizan las operaciones por clave para posicionar y recuperar registros con claves nulas.
* * Supuesto: Arch1 contiene un registro Rec1 con una clave compuesta * por tres campos clave: Key1, Key2 y Key3. Key2 y Key3 tienen * posibilidad de nulos. Key1 no tiene posibilidad de nulos. * Cada campo de clave tiene una longitud de dos caracteres. * *..1....+....2....+....3....+....4....+....5....+....6....+....7....+.. FFilename++IPEASFRlen+LKlen+AIDevice+.Keywords++++++++++++++++++++++++++ F* FArch1 IF E DISK F* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq. C* C Full_Kl KLIST C KFLD Key1 C KFLD *IN02 Key2 C KFLD *IN03 Key3 C* C Partial_Kl KLIST C KFLD Key1 C KFLD *IN05 Key2 C* C* C* *IN02 est ACTIVADO y *IN03 DESACTIVADO para la operacin STLL. C* Arch1 se situar en el siguiente registro que tenga una clave C* igual o mayor que 'AA??CC' (donde ?? se utiliza en este ejemplo C* para indicar NULO) C* C* Puesto que *IN02 est ACTIVADO, se ignorar el contenido real C* del argumento de bsqueda para Key2. C* C* Si existe un registro en Arch1 con 'AA' en Key1, nulo en Key2, y C* 'CC' en Key3, se ACTIVAR el indicador 90 (el indicador Ig). C* C MOVE 'AA' Key1 C MOVE 'CC' Key3 C EVAL *IN02 = '1' C EVAL *IN03 = '0' C Full_Kl SETLL Rec1 90 C*
Figura 41. Ejemplo de operaciones por clave utilizando campos de clave con posibilidad de nulos. (Pieza 1 de 2)
132
C* C* C* C* C* C* C* C* C C C C C C* C* C* C* C* C* C* C* C* C* C* C* C* C* C* C C C
La operacin CHAIN recuperar un registro con 'JJ' en Key1, 'KK' en Key2 y nulo en Key3. Puesto que *IN03 est ACTIVADO, aunque el programador haya movido algn valor (p.ej. 'XX') al argumento de bsqueda de Key3, no se utilizar 'XX'. Esto significa si File1 tiene realmente un registro con una clave 'JJKKXX', que el registro no se recuperar. MOVE MOVE EVAL EVAL CHAIN 'JJ' 'KK' *IN02 = '0' *IN03 = '1' Rec1 Key1 Key2 80
Full_Kl
La operacin CHAIN utiliza una clave parcial como argumento de bsqueda. Recuperar un registro con 'NN' en Key1, nulo en Key2 y cualquier valor, incluso nulo, en Key3. En la base de datos, el valor NULL ocupa la posicin ms alta en el orden de clasificacin. Suponer que las claves de File1 estn en orden ascendente. Si File1 tiene un registro con 'NN??xx' como clave (?? = NULO) y xx es cualquier valor distinto de NULO), se recuperar el registro. Si tal registro no existe en File1, pero File1 tiene un registro con 'NN????' como clave, se recuperar el registro 'NN????'. Los indicadores nulos de Key2 y Key3 se ACTIVARN como resultado. MOVE SETON CHAIN 'NN' Rec1 Key1 05 70
Partial_Kl
Figura 41. Ejemplo de operaciones por clave utilizando campos de clave con posibilidad de nulos. (Pieza 2 de 2)
133
134
v El programa puede realizar cualquier operacin de clculo de caracteres vlida en el campo de longitud fija declarado. Sin embargo, debido a la estructura del campo, los primeros dos bytes del campo deben contener datos de tipo entero sin signo vlidos al grabar el campo en un archivo. Se produce un error de excepcin de E/S en una operacin de salida si los primeros dos bytes del campo contienen datos de longitud no vlida. v En el transcurso de la compilacin, se producirn errores debidos a conflictos de definicin de campos cuando se importe un campo de longitud variable procedente de un archivo AS/400 en un objeto GUI y el archivo se utilice tambin en el programa como archivo descrito externamente con la opcin *VARCHAR o *VARGRAPHIC especificada. Los dos bytes correspondientes a la longitud de datos se aaden a la definicin del campo procedente del formato de registro de archivo, que entra en conflicto con la definicin de longitud de campo procedente del objeto GUI. Para soslayar este conflicto, no especifique la opcin *VARCHAR ni *VARGRAPHIC o bien redenomine el objeto GUI y escriba cdigo fuente para mover datos entre los dos campos segn convenga. v No est permitido utilizar indicadores de campo en una especificacin de entrada si el campo de entrada es un campo con posibilidad de nulos de un archivo de slo entrada descrito externamente. v No se permiten las operaciones por clave cuando el factor 1 de una operacin por clave corresponde a un campo de clave de longitud variable de un archivo descrito externamente. v Si selecciona la salida selectiva de ciertos campos de un registro y en la especificacin de salida no se ha especificado el campo de longitud variable, o si en el programa se pasa por alto el campo de longitud variable, se coloca un valor por omisin en el almacenamiento intermedio de salida del registro aadido recientemente. El valor por omisin es 0 en los primeros dos bytes y blancos en todos los dems bytes. v Si desea cambiar los campos de longitud variable convertidos, asegrese de que la longitud del campo actual sea correcta. Una forma de hacerlo es:
135
1. Definir una estructura de datos con un nombre de campo de longitud variable como un nombre de subcampo. 2. Definir un subcampo de tipo entero sin signo de 5 dgitos que solape el inicio del campo y definir un subcampo de caracteres de N-bytes que solape el campo que comienza en la posicin 3. 3. Actualizar el campo. Como alternativa, puede mover otro campo de longitud variable alineado a la izquierda en el campo. A continuacin, se facilita un ejemplo de cmo cambiar un campo de longitud variable convertido en un programa VARPG.
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ..* A* A* El archivo MASTER contiene un campo de longitud variable A* AAN01N02N03T.Name++++++Rlen++TDpBLinPosFunctions+++++++++++++++++++++ A* A R REC A FLDVAR 100 VARLEN *..1....+....2....+....3....+....4....+....5....+....6....+....7....+.. * H* H* Especificar la palabra clave CVTOPT(*VARCHAR) en una especificacin H* de control o compilar el programa VisualAge RPG con H* CVTOPT(*VARCHAR) en el mandato. H* HKeywords++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ H* H CVTOPT(*VARCHAR) F* F* El nombre de archivo descrito externamente es MASTER. F* FFilename++IPEASFRlen+LKlen+AIDevice+.Keywords++++++++++++++++++++++++++++ F* FMASTER UF E DISK
136
Si son necesarios campos grficos de longitud variable convertidos, puede codificar un campo de tipo entero sin signo de 2 bytes para guardar la longitud y un subcampo grfico de longitud N para guardar la parte de datos del campo.
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ..* D* D* El campo de grficos de longitud variable VGRAPH se declara en D* DDS como de longitud 3. Esto significa que la longitud mxima D* del campo es de 3 bytes dobles de 6 bytes. La longitud total del D* campo, incluida la parte de longitud, es de 8 bytes. D* D* Compilar el programa VARPG con CVTOPT(*VARGRAPHIC). D* DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D* D DS DVGRAPH 8 D VLEN 4U 0 OVERLAY(VGRAPH:1) D VDATA 3G OVERLAY(VGRAPH:3) *.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ..* C* C* Se presupone que GRPH es un campo de grficos de longitud fija C* con una longitud de 2 bytes dobles. GRPH se copia en VGRAPH y C* la longitud de VGRAPH se define como 2. C* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. C* C MOVEL GRPH VDATA C Z-ADD 2 VLEN
137
138
Literales
Un literal es una constante autodefinida a la que puede hacerse referencia en un programa. Un literal puede pertenecer a cualquiera de los tipos de datos de VisualAge RPG.
Literales de caracteres
Se aplican las normas siguientes cuando se especifica un literal de tipo carcter: v En un literal de caracteres puede utilizarse cualquier combinacin de caracteres. Esto incluye los caracteres DBCS. Los caracteres DBCS han de ser de un nmero par de bytes. Son vlidos los blancos intercalados. v Se permite un literal de tipo carcter sin caracteres entre los apstrofes. v Los literales de caracteres deben estar encerrados entre apstrofos (). v Un apstrofo necesario como parte de un literal se representa mediante dos apstrofos. Por ejemplo, el literal OCLOCK se codifica como OCLOCK. v Los literales de caracteres son compatibles nicamente con los datos de caracteres v Los literales de indicador son literales de tipo carcter de un byte que contienen un 1 (activado) o un 0 (desactivado).
Literales hexadecimales
Se aplican las normas siguientes cuando se especifica un literal hexadecimal: v Los literales hexadecimales tienen el formato siguiente:
X'x1x2...xn'
donde: Xx1x2...xn debe contener los caracteres A-F, a-f y 0-9. v El literal codificado entre los apstrofos debe tener una longitud par. v Cada par de caracteres define un solo byte. v Se permiten los literales hexadecimales donde estn soportados los literales de caracteres excepto como factor 2 de ENDSR y como palabras de edicin. v Un literal hexadecimal tiene el mismo significado que el literal de caracteres correspondiente excepto cuando se utiliza en las operaciones BITON, BITOFF y TESTB. En las operaciones de bit, el factor 2 puede contener un literal hexadecimal que represente 1 byte. Las normas y significados son los mismos tanto para los literales hexadecimales como para los campos de caracteres.
Copyright IBM Corp. 1994, 2000
139
v Si el literal hexadecimal contiene el valor hexadecimal de un apstrofo, no tiene que especificarse dos veces, como en el caso de los literales de caracteres. Por ejemplo, el literal
A'B
se especifica como
'A'B'
pero la versin hexadecimal es X412742 y no X41272742. v Normalmente, los literales hexadecimales son compatibles nicamente con los datos de carcter. Sin embargo, puede tratarse un literal hexadecimal que contiene 16 dgitos hexadecimales o menos como un valor numrico sin signo cuando se utiliza en una expresin numrica o cuando se inicializa una variable numrica con la palabra clave INZ.
Literales numricos
Se aplican las normas siguientes cuando se especifica un literal numrico: v Un literal numrico est compuesto de cualquier combinacin de dgitos del 0 a 9. Puede incluirse una coma decimal o un signo. v El signo (+ o ), si est presente, debe ser el carcter situado ms a la izquierda. Un literal sin signo se trata como un nmero positivo. v No pueden aparecer blancos en un literal numrico. v Los literales numricos no se encierran entre apstrofos (). v Los literales numricos se utilizan del mismo modo que un campo numrico, con la excepcin de que no puede asignarse valores a los literales numricos. v El separador decimal puede ser una coma o un punto Los literales numricos del formato flotante se especifican de forma algo distinta. Los literales flotantes son de la forma siguiente:
<mantisa>E<exponente> Donde <mantisa> es un literal como se ha descrito anteriormente de 1 a 16 dgitos <exponente> es un literal sin coma decimal con un valor entre -308 y +308
v Los literales flotantes no tienen que normalizarse. Es decir, no es necesario que la mantisa se escriba exactamente con un dgito a la izquierda de la coma decimal. (No es necesario especificar la coma decimal). v Puede utilizarse una e minscula en lugar de una E mayscula. v Puede utilizarse un punto (.) o una coma (,) como coma decimal. v Los literales flotantes estn permitidos siempre que se permitan las constantes numricas, excepto en las operaciones que no permiten tipos de datos flotantes. Por ejemplo, los literales flotantes no estn permitidos all donde se espera un literal numrico con cero posiciones decimales, como por ejemplo un ndice de matriz. v Los literales flotantes siguen las mismas reglas de continuacin que los literales numricos. Un literal puede dividirse en cualquier punto. v Un literal flotante debe tener un valor dentro de los lmites descritos en 1.6.2, Reglas de definicin en la pgina 4. A continuacin se proporcionan algunos ejemplos de literales flotantes vlidos:
1E1 1.2e-1 -1234.9E0 12e12 +67,89E+0003 = = = = = 10 .12 -1234.9 12000000000000 67890 (con coma decimal)
140
Literales de fecha
Los literales de fecha tienen el formato Dxxxxxx, donde: v D indica que el literal es de tipo de fecha v xxxxxx es una fecha vlida en el formato especificado en la especificacin de control v xxxxxx est encerrado entre apstrofos ().
Literales de hora
Los literales de hora tienen el formato Txxxxxx, donde: v T indica que el literal es de tipo de hora v xxxxxx es una hora vlida en el formato especificado en la especificacin de control v xxxxxx est encerrado entre apstrofos ().
Literales de grficos
Los literales de grficos tienen el formato GK1K2, donde: v G indica que el literal es de tipo de grficos v K1K2 es un nmero par de bytes v K1K2 est encerrado entre apstrofos ().
Literales UCS-2
Los literales UCS-2 tienen el formato UXxxx...Yyyy, donde: v U indica que el literal es de tipo UCS-2. v Cada literal UCS-2 requiere cuatro bytes por cada carcter UCS-2 del literal. Cada cuatro bytes del literal representan un carcter UCS-2 de doble byte. v Los literales UCS-2 son compatibles nicamente con los datos UCS-2. Se asume que los literales UCS-2 tienen el CCSID UCS-2 por omisin del mdulo.
141
Constantes figurativas
Las siguientes constantes figurativas son literales implcitos que pueden especificarse sin una longitud, porque la longitud implcita y las posiciones decimales de una constante figurativa son iguales que las del campo asociado. Consulte el apartado Reglas para constantes figurativas en la pgina 144 para obtener una lista de excepciones.
*ALLx.., *ALLGK1K2 *ALLUXxxxYyyy, *ALLXx1.. *LOVAL *ZERO/*ZEROS *BLANK/*BLANKS *HIVAL
*NULL
*ON/*OFF
142
Pueden especificarse constantes figurativas en el factor 1 y factor 2 de las especificaciones de clculo. A continuacin, se muestran las palabras reservadas y los valores implcitos para las constantes figurativas:
Palabras reservadas *BLANK/*BLANKS *ZERO/*ZEROS *HIVAL Valores implcitos Todo blancos. Solamente es vlido para campos de tipo carcter, grfico o UCS-2. Campos de caracteres/numricos: Todo ceros. Para los campos flotantes numricos: El valor es 0 E0. Campos de tipo carcter, grfico o UCS-2: El carcter de clasificacin ms alto del sistema (FF hexadecimales). Campos numricos: Todo nueves con un signo positivo. Para campos flotantes: *HIVAL para flotante de 4 bytes = 3.402 823 5E38 (xFF7FFFFF) *HIVAL para flotante de 8 bytes = 1.797 693 134 862 315 E308 (xFFEFFFFFFFFFFFFF) Campos de fecha, hora e indicacin de la hora: Consulte los apartados Datos de fecha en la pgina 112, Datos de hora en la pgina 126 y Datos de indicacin de la hora en la pgina 128 para conocer los valores *HIVAL para los datos de fecha, hora e indicacin de la hora. Campos de tipo carcter, grfico o UCS-2: El carcter de clasificacin ms bajo del sistema (ceros hexadecimales). Campos numricos: Todo nueves con un signo negativo. Para campos flotantes: *LOVAL para flotante de 4 bytes = -3.402 823 5E38 (x7F7FFFFF) *LOVAL para flotante de 8 bytes = -1.797 693 134 862 315 E308 (x7FEFFFFFFFFFFFFF) Campos de fecha, hora e indicacin de la hora: Consulte los apartados Datos de fecha en la pgina 112, Datos de hora en la pgina 126 y Datos de indicacin de la hora en la pgina 128 para conocer los valores *LOVAL para los datos de fecha, hora e indicacin de la hora. Campos de caracteres/numricos: La serie de caracteres x . . se repite cclicamente en una longitud igual a la del campo asociado. Si el campo es numrico, todos los caracteres de la serie deben ser numricos (0 a 9). No puede especificarse un signo o una coma decimal cuando se utiliza *ALLx.. como constante numrica. Nota: No puede utilizar *ALLx.. con campos numricos de formato flotante. Para campos numricos enteros o sin signo, el valor nunca es mayor que el valor mximo permitido para el campo correspondiente. Campos grficos: La serie grfica K1K2 se repite cclicamente en una longitud igual a la del campo asociado. Campos UCS-2: Una constante figurativa con el formato *ALLUXxxxYyyy indica un literal con el formato XxxxYyyyXxxxYyyy... y con una longitud determinada por la longitud del campo asociado a la constante *ALLUXxxxYyyy. Cada carcter de doble byte de la constante se representa mediante cuatro dgitos hexadecimales. Por ejemplo, *ALLU0041 representa una serie de letras A UCS-2 repetidas. Campos de caracteres: El literal hexadecimal Xx1.. se repite cclicamente en una longitud igual a la del campo asociado. Un valor nulo vlido para punteros de base o punteros de procedimiento.
Captulo 10. Literales y constantes con nombre
*LOVAL
*ALLx..
*ALLGK1K2 *ALLUXxxxYyyy
*ALLXx1.. *NULL
143
*ON/*OFF
Las constantes figurativas siguientes son literales implcitos que pueden utilizarse con el cdigo de operacin DSPLY:
*ABORT *IGNORE *RETRY *CANCEL *INFO *WARN *ENTER *NOBUTTON *YESBUTTON *HALT *OK
Las constantes figurativas siguientes son literales implcitos que pueden utilizarse al crear la GUI de una aplicacin:
*BLACK *DARKBLUE *DARKPINK *PINK *BLUE *DARKCYAN *DARKRED *RED *BROWN *DARKGREEN *GREEN *YELLOW *CYAN *DARKGRAY *PALEGRAY *WHITE
v Las operaciones MOVE y MOVEL permiten el desplazamiento de una constante figurativa de caracteres a un campo numrico. La constante figurativa se ampla primero como numrica con zona del tamao del campo numrico, se convierte a numrica empaquetada o numrica binaria si es necesario y a continuacin se almacena en el campo numrico de destino. La parte de dgitos de cada carcter de la constante debe ser vlida. v Las constantes figurativas se consideran elementos bsicos. A excepcin de MOVEA, las constantes figurativas actan como un campo si se utilizan junto con una matriz. Por ejemplo: MOVE *ALLXYZ ARR. Si ARR tiene elementos de caracteres de 4 bytes, cada elemento contiene XYZX. v MOVEA se considera un caso especial. La constante se genera con una longitud igual a la de la parte de la matriz especificada. Por ejemplo: MOVEA *BLANK ARR(X) A partir del elemento X, el resto de ARR contiene espacios en blanco. MOVEA *ALLXYZ ARR(X) ARR tiene elementos de caracteres de 4 bytes. Se pasan por alto los lmites de elementos, como ocurre siempre con las operaciones MOVEA de caracteres. A partir del elemento X, el resto de la matriz contiene XYZXYZXYZ....
144
v Los cdigos de operacin SETGT y SETLL no admiten la utilizacin del valor *HIVAL o *LOVAL en el factor 1. Nota: Los resultados de MOVEA son distintos de los del ejemplo de MOVE: v Una vez se han establecido o restaurado las constantes figurativas con su longitud adecuada, su orden de clasificacin normal se puede alterar si se especifica un orden de clasificacin alternativo. v Las operaciones de movimiento MOVE y MOVEL producen el mismo resultado cuando mueven las constantes figurativas *ALLx.., *ALLGK1K2 y *ALLXx1... La serie se repite cclicamente carcter por carcter (comenzando por la izquierda) hasta que la longitud del campo asociado es la misma que la longitud de la serie. v Pueden utilizarse constantes figurativas en las operaciones de comparacin siempre que uno de los factores no sea una constante figurativa. v En una operacin MOVE, las constantes figurativas y *BLANK/*BLANKS se mueven como ceros a un campo numrico.
145
146
147
Puede redenominar un nombre de subcampo externo en el programa utilizando la palabra clave EXTFLD. La palabra clave PREFIX puede utilizarse para aadir un prefijo a los nombres de subcampo externos que no se han redenominado con EXTFLD. Tenga en cuenta que los subcampos de estructura de datos no estn afectados por la palabra clave PREFIX especificada en una especificacin de descripcin de archivo, incluso aunque el archivo tenga el mismo nombre que el parmetro especificado en la palabra clave EXTNAME al definir la estructura de datos utilizando un nombre de archivo externo. Se pueden aadir subcampos adicionales a una estructura de datos descrita externamente especificando subcampos descritos por programa inmediatamente despus de la lista de subcampos externos. Consulte los apartados EXTFLD(nombre_campo) en la pgina 243 y PREFIX(serie_prefijo{:nm_de_car_sustit}) en la pgina 260.
148
Por ejemplo, al definir subcampos de tipo puntero base o puntero de procedimiento utilizando la notacin de longitud, el compilador rellenar automticamente, si es necesario, para asegurar que el subcampo est adecuadamente alineado. Al definir subcampos flotantes, enteros o sin signo, puede ser deseable la alineacin para mejorar el rendimiento del tiempo de ejecucin. Si los subcampos se definen utilizando la notacin de longitud, puede alinear automticamente los subcampos flotantes, enteros o sin signo especificando la palabra clave ALIGN en la definicin de estructura de datos. Sin embargo, debe tener en cuenta las excepciones siguientes: v La palabra clave ALIGN no est permitida para una estructura de datos de informacin o de estado de programa. v Los subcampos definidos utilizando la palabra clave OVERLAY no se alinean automticamente, aunque se especifique la palabra clave ALIGN para la estructura de datos. En este caso, debe alinear los subcampos manualmente. La alineacin automtica alinear los campos en los lmites siguientes. v 2 bytes para subcampos enteros o sin signo de 5 dgitos v 4 bytes para subcampos enteros o sin signo de 10 dgitos o subcampos flotantes de 4 bytes v 8 bytes para subcampos enteros o sin signo de 20 dgitos v 8 bytes para subcampos flotantes de 8 bytes v 16 bytes para campos de puntero Si va a alinear los campos manualmente, asegrese de que estn alienados en los mismos lmites. Una posicin inicial est en un lmite de n bytes si ((posicin 1) mod n) = 0. (El valor de x mod y es el resto despus de dividir x por y en aritmtica de enteros. Es lo mismo que el valor MVR despus de X DIV Y.) La Figura 46 muestra una secuencia de bytes e identifica los diferentes lmites utilizados para la alineacin.
1 2 3 4 5 6 7 8 9 10 11 12 13 15 16 17 18
Tenga en cuenta lo siguiente acerca de la secuencia de bytes anterior: v La posicin 1 est en un lmite de 16 bytes, ya que ((1-1) mod 16) = 0. v La posicin 13 est en un lmite de 4 bytes, ya que ((13-1) mod 4) = 0. v La posicin 7 no est en un lmite de 4 bytes, ya que ((7-1) mod 4) = 2.
149
utilizando el cdigo de operacin *DTAARA DEFINE o la palabra clave DTAARA. Consulte DEFINE (Definicin de campo) en la pgina 428 y DTAARA{(nombre_rea_datos)} en la pgina 242. Puede especificar las operaciones de rea de datos (IN, OUT y UNLOCK) para un rea de datos que se lea y se grabe implcitamente. Antes de utilizar una estructura de datos de rea de datos con estas operaciones, debe especificar dicha rea de datos en el campo del resultado de la operacin *DTAARA DEFINE o con la palabra clave DTAARA. Consulte DEFINE (Definicin de campo) en la pgina 428 y DTAARA{(nombre_rea_datos)} en la pgina 242. Nota: Una estructura de datos de rea de datos no puede especificarse en el campo del resultado de una operacin PARM en la *ENTRY PLIST.
150
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D.....................................Keywords+++++++++++++++++++++++++++++ * * Utilice la notacin de longitud para definir los subcampos de estructura * de datos. Puede referirse a toda la estructura con Partno, o con los * subcampos individuales Manufactr, Drug, Strength o Count. * D Partno DS D Manufactr 4 D Drug 6 D Strength 3 D Count 3 0 D *.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 IFilename++Sq..RiPos1+NCCPos2+NCCPos3+NCC.................................. I........................Fmt+SPFrom+To+++DcField+++++++++....FrPlMnZr...... * * Los registros del archivo FILEIN descrito por programa contienen un campo, * Partno, que necesita subdividirse para procesarse en este programa. * Para conseguirlo, el campo Partno se describe como una estructura de * datos que utiliza la especificacin de definicin anterior. * IFILEIN NS 01 1 CA 2 CB I 3 18 Partno I 19 29 Name I 30 40 Patno
151
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D.....................................Keywords+++++++++++++++++++++++++++++ * * Cuando utiliza una estructura de datos para agrupar campos, puede * hacerse que campos de ubicaciones no adyacentes del registro de entrada * ocupen ubicaciones adyacentes internas. Puede hacerse referencia al * rea por el nombre de la estructura de datos o el nombre del subcampo * individual. * D Partkey DS D Location 4 D Partno 8 D Type 4 D *.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 IFilename++Sq..RiPos1+NCCPos2+NCCPos3+NCC.................................. I........................Fmt+SPFrom+To+++DcField+++++++++....FrPlMnZr...... * * Los campos del archivo TRANSACTN descrito por programa deben compararse * con el campo recuperado de un archivo Item_Master * ITRANSACTN NS 01 1 C1 2 C2 I 3 10 Partno I 11 16 0Quantity I 17 20 Type I 21 21 Code I 22 25 Location I *.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... * * Utilice el nombre de estructura de datos Partkey para comparar * con el campo Item_Nbr * C : C Partkey IFEQ Item_Nbr 99 C : C*
152
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D.....................................Keywords+++++++++++++++++++++++++++++ * * Definir una estructura de datos descrita por programa llamada FRED * La estructura de datos se compone de 5 campos: * 1. Una matriz con longitud de elemento 10 y dimensin 70(Field1) * 2. Un campo de longitud 30 (Field2) * 3/4. Dividir Field2 en 2 campos de igual longitud (Field3 y Field4) * 5. Definir un campo binario sobre el tercer campo * Se debe tener en cuenta el sangrado para mejorar la lectura * * * Notacin absoluta: * * El compilador determinar la longitud del elemento de matriz (Field1) * dividiendo la longitud total (700) por la dimensin (70) * D FRED DS D Field1 1 700 DIM(70) D Field2 701 730 D Field3 701 715 D Field5 701 704B 2 D Field4 716 730 * * Notacin de longitud: * * La palabra clave OVERLAY se utiliza para subdividir Field2 * D FRED DS D Field1 10 DIM(70) D Field2 30 D Field3 15 OVERLAY(Field2) D Field5 4B 2 OVERLAY(Field3) D Field4 15 OVERLAY(Field2:16)
153
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D.....................................Keywords+++++++++++++++++++++++++++++ D D extds1 E DS EXTNAME (CUSTDATA) D PREFIX (CU_) D Name E INZ ('Joe's Garage') D Custnum E EXTFLD (NUMBER) D * * La estructura de datos anterior se amplia de la forma siguiente: * -- Todos los campos descritos externamente se incluyen en la * estructura de datos * -- Los subcampos redenominados mantienen los nombres nuevos * -- Los subcampos no redenominados obtienen un prefijo * con la cadena de caracteres de prefijo * * Estructura de datos ampliada: * D EXTDS1 E DS D CU_NAME E 20A EXTFLD (NAME) D INZ ('Joe's Garage') D CU_ADDR E 50A EXTFLD (ADDR) D CUSTNUM E 9S0 EXTFLD (NUMBER) D CU_SALESMN E 7P0 EXTFLD (SALESMN)
Figura 51. Utilizacin de PREFIX para redenominar todos los campos en una estructura de datos externa
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D.....................................Keywords+++++++++++++++++++++++++++++ * * Definir estructura de datos de varias apariciones de 20 elementos con: * -- 3 campos de 20 caracteres * -- Un cuarto campo de 10 caracteres que solapa al segundo * y empieza en la segunda posicin. * * La constante con nombre 'twenty' se utiliza para definir el nmero * de aparicin * * Notacin absoluta (utilizacin de posiciones inicial/final) * D twenty C CONST(20) D DDataStruct DS OCCURS (twenty) D field1 1 20 D field2 21 40 D field21 22 31 D field3 41 60 * * Mezcla de notacin absoluta y de longitud * D DataStruct DS OCCURS(twenty) D field1 20 D field2 20 D field21 22 31 D field3 41 60
154
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D.....................................Keywords+++++++++++++++++++++++++++++ * * Este programa utiliza una estructura de datos de rea de datos para * acumular una serie de totales. * D Totals UDS D Import_tot 8 2 D Tot_gross 10 2 D Tot_netto 10 2 *.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 CSRN01Factor1+++++++Opcode(E)+Factor2++++++++++++++++++++++++++++++++++++++ * C : C EVAL Tot_amount = Tot_amount + amount C EVAL Tot_gross = Tot_gross + gross C EVAL Tot_netto = Tot_netto + netto
155
156
Matrices
Existen tres tipos de matrices: v La matriz de tiempo de ejecucin se carga mientras se ejecuta el programa. v La matriz de tiempo de compilacin se carga cuando se crea el programa. Los datos iniciales se convierten en una parte permanente del programa. v La matriz de tiempo de preejecucin se carga de un archivo de matriz cuando el programa inicia la ejecucin, antes de procesar operaciones de entrada, clculo o salida.
157
Los puntos esenciales de la definicin y carga de una matriz se describen para las matrices de tiempo de ejecucin. Para definir y cargar matrices de tiempo de compilacin y de tiempo de preejecucin, utilice estos puntos esenciales y algunas especificaciones adicionales.
El ndice indica la posicin del elemento en la matriz (comenzando a partir de 1) y si es un nmero o un campo que contiene un nmero. Se aplican las normas siguientes cuando se especifica un nombre de matriz y un ndice: v El nombre de matriz debe ser un nombre simblico exclusivo v El ndice debe ser un campo numrico o constante mayor que cero y con cero posiciones decimales v Si se especifica la matriz en una expresin del campo del factor 2 ampliado, el ndice puede ser una expresin que devuelva un valor numrico con cero posiciones decimales v En tiempo de ejecucin, si el programa hace referencia a una matriz que utiliza un ndice con un valor que sea cero, negativo o mayor que el nmero de elementos de la matriz, la rutina de error/excepcin toma el control del programa.
158
Figura 54. Especificaciones esenciales para definir una matriz de tiempo de ejecucin
Figura 55. Utilizacin de una matriz de tiempo de ejecucin con elementos consecutivos
Si los elementos de la matriz estn distribuidos por todo el registro, se pueden definir y cargar uno por uno, con un elemento descrito en una lnea de especificacin. La Figura 56 en la pgina 160 muestra las especificaciones para cargar una matriz de seis elementos (12 caracteres cada uno) desde un solo registro. Un blanco separa cada uno de los elementos de los dems.
159
*...1....+....2....+....3....+....4....+....5....+....6....+....7... DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ DARRX S 12A DIM(6) IFilename++Sq..RiPos1+NCCPos2+NCCPos3+NCC................................ I........................Fmt+SPFrom+To+++DcField+++++++++....FrPlMnZr.... IARRFILE AA 01 I 1 12 ARRX(1) I 14 25 ARRX(2) I 27 38 ARRX(3) I 40 51 ARRX(4) I 53 64 ARRX(5) I 66 77 ARRX(6)
Figura 56. Definicin de una matriz de tiempo de ejecucin con elementos distribuidos
160
48K
163
43J
640
44H
126
48A
473
49K
346
50B
125
v Cada registro, excepto el ltimo, debe contener el nmero de entradas especificado con la palabra clave PERRCD en las especificaciones de definicin. En el ltimo registro, las entradas no utilizadas deben estar en blanco y pueden incluirse comentarios despus de ellas. v Cada entrada debe estar totalmente contenida en un registro. Una entrada no se puede dividir entre dos registros. La longitud de una sola entrada est limitada por la longitud mxima de 100 caracteres (tamao del registro fuente). Si se utilizan matrices y se describen en un formato alternativo, los elementos correspondientes deben estar en el mismo registro. Juntos no pueden sobrepasar los 100 caracteres. v Los datos de las matrices de tiempo de compilacin de fecha y hora deben estar en el mismo formato y utilizar los mismos separadores que la matriz de fecha y hora que se est cargando.
Captulo 12. Utilizacin de matrices y tablas
161
v Los datos de la matriz se pueden especificar de una de estas dos formas: **CTDATA nombrematriz: Los datos para la matriz pueden especificarse en cualquier lugar de la seccin de datos de tiempo de compilacin. **b: (b=blanco) Los datos para las matrices deben especificarse en el mismo orden que el empleado en las especificaciones de definicin. Slo puede utilizarse una de estas tcnicas en un programa. v Las matrices pueden estar en secuencia ascendente (palabra clave ASCEND), descendente (palabra clave DESCEND) o sin secuencia (no se especifica una palabra clave). v Las matrices de tipo grfico y UCS-2 se clasifican segn los valores hexadecimales. v Si se especifica L o R en la palabra clave EXTFMT de la especificacin de definicin, cada elemento debe incluir el signo (+ o ). Por ejemplo, una matriz con un tamao de elemento 2 con L especificado necesitar 3 posiciones en los datos fuente (+3738+5263). v Los datos flotantes de tiempo de compilacin se especifican en los registros fuente como literales flotantes o numricos. Las matrices definidas como flotantes de 4 bytes necesitan 14 posiciones para cada elemento; las matrices definidas como flotantes de 8 bytes necesitan 23 posiciones para cada elemento.
162
*....+....1....+....2....+....3....+....4....+....5....+....6....+....* HKeywords+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ H DATFMT(*USA) TIMFMT(*HMS) DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords++++++++++++++++++++ D* Matriz tiempo ejec.. ARI con 10 elementos de tipo fecha. Tienen D* el formato de mes, da, ao utilizando una barra inclinada como D* separador tal y como se ha definido en la especificacin de D* control. DARI S D DIM(10) INZ(D'09/15/1994') D* Matrices de tiempo de compilacin en formato alternativo. D* Ambas matrices tienen ocho elementos (tres elementos D* por registro). ARC es una matriz de caracteres con una D* longitud de 15 y ARD es una matriz de hora con una D* longitud predefinida de 8. DARC S 15 DIM(8) PERRCD(3) D CTDATA DARD S T DIM(8) ALT(ARC) D* D* Matriz de tiempo de preejecucin. ARE, que debe leerse del D* archivo DISKIN, tiene 250 elementos de caracteres D* (12 elementos por registro). Cada elemento tiene una D* longitud de cinco posiciones. El tamao de cada registro es D* 60 (5*12). Los elementos se organizan en secuencia ascendente. DARE S 5A DIM(250) PERRCD(12) ASCEND D FROMFILE(DISKIN) D* D* D* Matriz de tiempo de preejecucin especificada como un archivo D* combinado. ARH se graba de nuevo en el mismo archivo del D* que se lee cuando el programa finaliza normalmente con LR D* activado. ARH tiene 250 elementos de caracteres (12 elementos D* por registro). Cada elemento tiene una longitud de cinco D* posiciones. Los elementos se organizan en secuencia ascendente. DARH S 5A DIM(250) PERRCD(12) ASCEND D FROMFILE(DISKOUT) D TOFILE(DISKOUT) **CTDATA ARC Toronto 12:15:00Winnipeg 13:23:00Calgary 15:44:00 Sydney 17:24:30Edmonton 21:33:00Saskatoon 08:40:00 Regina 12:33:00Vancouver 13:20:00
163
Inicializacin de matrices
Para inicializar cada elemento de una matriz de tiempo de ejecucin con el mismo valor, especifique la palabra clave INZ en la especificacin de definicin. Si la matriz est definida como un subcampo de estructura de datos, se aplican las normas generales de solapamiento de la inicializacin de estructura de datos (la inicializacin se lleva a cabo en el orden en que se declaran los campos en la estructura de datos).
164
A R R A (Nmero de pieza) 345126 38A437 39K143 40B125 41C023 42D893 43K823 44H111 45P673 46C732
A R R B (Coste unitario) 373 498 1297 93 3998 87 349 697 898 47587 Las matrices ARRA y ARRB se pueden describir como dos archivos de matrices independientes o como un archivo de matrices en un formato alternativo.
Los registros para ARRA y ARRB se parecen a los registros de la Figura 60 cuando se describen como dos archivos de matriz independientes. Este registro contiene entradas ARRA en las posiciones 1 a 60.
Entrada de ARRA 43 . . . .
Entrada de ARRB 31 . . . .
Entrada de ARRB 36 . . . .
Entrada de ARRB 41 . . . .
Entrada de ARRB 46 . . . .
Los registros para ARRA y ARRB son similares a los registros de la Figura 62 cuando se describen como un archivo de matriz con formato alternativo. El primer registro contiene las entradas de ARRA y ARRB con formato alternativo en las posiciones 1 a 55. El segundo registro contiene las entradas de ARRA y ARRB con formato alternativo en las posiciones 1 a 55.
Entrada de ARRA 13 . . . .
Entrada de ARRB 16 . . . .
Entrada de ARRA 25 . . . .
Entrada de ARRB 21 . . . .
165
*....+....1....+....2....+....3....+....4....+....5....+....6....+....* DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++ DARRA S 6A DIM(6) PERRCD(1) CTDATA DARRB S 5 0 DIM(6) ALT(ARRA) DARRGRAPHIC S 3G DIM(2) PERRCD(2) CTDATA DARRC S 3A DIM(2) ALT(ARRGRAPHIC) DARRGRAPH1 S 3G DIM(2) PERRCD(2) CTDATA DARRGRAPH2 S 3G DIM(2) ALT(ARRGRAPH1) **CTDATA ARRA 345126 373 38A437 498 39K143 1297 40B125 93 41C023 3998 42D893 87 **CTDATA ARRGRAPHIC ok1k2k3iabcok4k5k6iabc **CTDATA ARRGRAPH1 ok1k2k3k4k5k6k1k2k3k4k5k6i
Bsqueda de matrices
La operacin LOOKUP puede utilizarse para efectuar bsquedas en matrices. Consulte el apartado LOOKUP (Buscar un elemento en tabla o matriz) en la pgina 466 para obtener una descripcin de la operacin LOOKUP.
166
*...1....+....2....+....3....+....4....+....5....+....6....+....7... FFilename++IT.A.FRlen+......A.Device+.Keywords++++++++++++++++++++++++++++++++ FARRFILE IT F 5 DISK F* DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ DDPTNOS S 5S 0 DIM(50) FROMFILE(ARRFILE) D* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. C* Se procesa la operacin LOOKUP y, si se encuentra un elemento DPTNOS C* igual al argumento de bsqueda (DPTNUM), se activa el indicador 20. C DPTNUM LOOKUP DPTNOS 20
ARRFILE, que contiene nmeros de departamento, est definido en las especificaciones de descripcin de archivo como un archivo de entrada (I en posicin 17) con una designacin de archivo de matriz (T en posicin 18). El archivo est descrito por programa (F en la posicin 22) y cada registro tiene 5 posiciones de longitud (5 en la posicin 27). En las especificaciones de definicin, se define ARRFILE como conteniendo la matriz DPTNOS. La matriz contiene 50 entradas (DIM(50)). Cada entrada tiene una longitud de 5 posiciones (posiciones 33-39) con cero posiciones decimales (posiciones 41-42). Cada registro puede contener un nmero de departamento (PERRCD toma el valor por omisin de 1).
167
*...1....+....2....+....3....+....4....+....5....+....6....+....7... FFilename++IT.A.FRlen+......A.Device+.Keywords++++++++++++++++++++++++++++++++ FARRFILE IT F 25 DISK F* DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ DDPTNOS S 5S 0 DIM(50) FROMFILE(ARRFILE) DDPTDSC S 20A DIM(50) ALT(DPTNOS) D* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. C* La operacin Z-ADD comienza la operacin LOOKUP en el primer C* elemento de DPTNOS. C Z-ADD 1 X 3 0 C* Al final de una operacin LOOKUP satisfactoria, al encontrar un C* elemento que contiene una entrada igual al argumento de bsqueda, C* DPTNUM, se activa el indicador 20 y la operacin MOVE coloca la C* descripcin de departamento correspondiente al nmero de C* departamento en DPTNAM. C DPTNUM LOOKUP DPTNOS(X) 20 C* Si no se encuentra un elemento igual al argumento de bsqueda, C* se mueve el elemento X de DPTDSC a DPTNAM. C IF NOT *IN20 C MOVE DPTDSC(X) DPTNAM 20 C ENDIF
Utilizacin de matrices
Las matrices pueden utilizarse en especificaciones de entrada, salida o clculo.
Pueden utilizarse otras operaciones slo con un elemento de matriz, pero no con el nombre de la matriz nicamente. Estas operaciones incluyen, aunque no estn limitadas a, las siguientes:
BITON DO BITOFF DOU CABxx DOUxx CAT DOW COMP DOWxx
168
IF TESTN
IFxx TESTZ
MVR WHEN
SUBST WHENxx
TESTB
Cuando se especifica con un nombre de matriz sin ndice o con un asterisco como el ndice (por ejemplo, ARRAY o ARRAY(*)), se repiten ciertas operaciones para cada elemento de la matriz. Se trata de las siguientes:
ADD MOVE Z-ADD ADDDUR MOVEL Z-SUB DIV MULT EVAL SQRT EXTRCT SUB
A estas operaciones se aplican las normas siguientes cuando se especifica un nombre de matriz sin un ndice: v Cuando el factor 1, el factor 2 y el campo de resultado son matrices con el mismo nmero de elementos, la operacin utiliza el primer elemento de cada matriz, a continuacin el segundo elemento de cada matriz hasta que se han procesado todos los elementos de las matrices. Si las matrices no tienen el mismo nmero de entradas, la operacin finaliza cuando se ha procesado el ltimo elemento de la matriz que contiene menos elementos. Cuando no se especifica el factor 1 para las operaciones ADD, SUB, MULT y DIV, se presupone que el factor 1 es igual que el campo de resultado. v Cuando uno de los factores es un campo, literal o constante figurativa y el otro factor y el campo de resultado son matrices, la operacin se lleva a cabo una vez para cada elemento en la matriz ms corta. Se utiliza el mismo campo, literal o constante figurativa en todas las operaciones. v El campo de resultado debe ser siempre una matriz. v Si un cdigo de operacin utiliza nicamente el factor 2 (por ejemplo, puede que Z-ADD, Z-SUB, SQRT, ADD, SUB, MULT o DIV no tengan el factor 1 especificado) y el campo de resultado es una matriz, se lleva a cabo la operacin una vez para cada elemento de la matriz. Se utiliza el mismo campo o constante en todas las operaciones si el factor 2 no es una matriz. v No pueden utilizarse los indicadores resultantes (posiciones 71 a 76) debido al nmero de operaciones que estn procesndose. Nota: Cuando se utilizan en una operacin EVAL, %ADDR(arr) y %ADDR(arr(*)) no tienen el mismo significado. Consulte el apartado %ADDR (Obtener direccin de variable) en la pgina 314 para obtener ms detalles.
Clasificacin de matrices
Puede clasificar matrices utilizando el cdigo de operacin SORTA. La matriz se clasifica en secuencia (ascendente o descendente) segn la secuencia especificada para la matriz en la especificacin de definicin.
169
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D DS D Emp_Info 50 DIM(500) ASCEND D Emp_Name 45 OVERLAY(Emp_Info:1) D Emp_Salary 9P 2 OVERLAY(Emp_Info:46) D CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C C* Esta operacin SORTA clasifica Emp_Info por nombre de empleado. C* Se utiliza la secuencia de Emp_Name para determinar el orden de los C* elementos de Emp_Info. C SORTA Emp_Name C* Esta operacin SORTA clasifica Emp_Info por sueldo de empleado. C* Se utiliza la secuencia de Emp_Salary para determinar el orden de los C* elementos de Emp_Info. C SORTA Emp_Salary
Salida de matriz
Pueden grabarse matrices enteras al final del programa solamente cuando se ha activado el indicador LR. Para indicar que se ha de grabar toda una matriz, especifique el nombre del archivo de salida con la palabra clave TOFILE en las especificaciones de definicin. Este archivo debe describirse como un archivo combinado organizado secuencialmente en las especificaciones de descripcin de archivo. Si el archivo es un archivo combinado y est descrito externamente como un archivo fsico, la informacin de la matriz al final del programa sustituye a la informacin que se ha ledo en la matriz al comienzo del programa. Los archivos lgicos pueden dar resultados imprevisibles. Si se ha de grabar toda una matriz en un registro de salida (utilizando las especificaciones de salida), describa la matriz junto con los dems campos del registro: v Las posiciones 30 a 43 de las especificaciones de salida deben contener el nombre de matriz utilizado en las especificaciones de definicin. v Las posiciones 47 a 51 de las especificaciones de salida deben contener la posicin de registro donde ha de finalizar el ltimo elemento de la matriz. Si se especifica un cdigo de edicin, la posicin final debe incluir posiciones en blanco y cualquier extensin debida al cdigo de edicin (consulte el apartado Edicin de matrices completas ms adelante en este apartado). Pueden especificarse indicadores de salida (posiciones 21 a 29). Las entrada de supresin de ceros (posicin 44), blanco despus (posicin 45) y formato de datos (posicin 52) pertenecen a cada elemento de la matriz.
170
hay espacios en blanco a la izquierda de todos los elementos de la matriz excepto en el primero. Cuando se especifica una palabra de edicin, no se insertan los blancos. La palabra de edicin debe contener todos los blancos que se han de insertar.
Tablas
La explicacin dada para las matrices se aplica a las tablas excepto en las siguientes diferencias:
Actividad Definicin Utilizacin y modificacin de elementos de tabla Bsqueda Diferencias Un nombre de tabla debe ser un nombre simblico exclusivo que comience por las letras TAB. Slo un elemento de una tabla est activo cada vez. El nombre de la tabla se utiliza para hacer referencia al elemento activo. La operacin LOOKUP se especifica de modo diferente para las tablas.
171
Nota: Si especifica un nombre de tabla en una operacin distinta de LOOKUP antes de que se produzca una operacin LOOKUP satisfactoria, la tabla se establece en su primer elemento.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. C* La operacin LOOKUP busca en TABEMP una entrada que sea igual al C* contenido del campo llamado EMPNUM. Si se encuentra una entrada C* igual en TABEMP, se activa el indicador 09 y la entrada TABEMP C* y su entrada relacionada en TABPAY se convierten en los elementos C* actuales. C EMPNUM LOOKUP TABEMP TABPAY 09 C* Si est activado el indicador 09, el contenido del campo denominado C* HRSWKD se multiplica por el valor del elemento actual de C* TABPAY. C IF *IN09 C HRSWKD MULT(H) TABPAY AMT 6 2 C ENDIF
172
004765r
004765r
47652-
El campo alfanumrico no editado y el campo numrico positivo no editado resultan fciles de leer cuando se imprimen, pero el campo numrico negativo no editado resulta confuso porque contiene una r, que no es numrica. La r es una combinacin del dgito 2 y el signo negativo del signo. Se combinan de modo que una de las posiciones del campo no tenga que reservarse para el signo. La combinacin resulta conveniente para almacenar el campo en el sistema, pero hace que la salida resulte difcil de leer. Los campos numricos deben editarse antes de imprimirlos.
Cdigos de edicin
Los cdigos de edicin proporcionan un medio de editar campos numricos segn un patrn predefinido. Se dividen en dos categoras: simples (X, Y, Z) y de combinacin (1 a 4, A a D, J a Q). Entrar el cdigo de edicin en la posicin 44 de las especificaciones de salida del campo a editar. O, puede especificar el cdigo de edicin como el segundo parmetro de la funcin incorporada %EDITC en las especificaciones de clculo.
173
174
Para especificar proteccin de asterisco utilizando la funcin incorporada %EDITC, especifique *ASTFILL como el tercer parmetro. El relleno de asterisco y el smbolo de moneda flotante no se pueden utilizar con los cdigos de edicin simples (X, Y, Z). Para la funcin incorporada %EDITC, especifique un smbolo de divisa flotante en el tercer parmetro. Para utilizar el smbolo de divisa del programa, especifique *CURSYM. Para utilizar otro smbolo de divisa, especifique una constante de carcter de longitud 1. Un smbolo de moneda puede aparecer antes del relleno de asterisco (smbolo de moneda fijo). Esto requiere dos especificaciones de salida con la codificacin siguiente: 1. Coloque una constante de smbolo de moneda en la posicin 53 de la primera especificacin de salida. La posicin final especificada en las posiciones 47-51 debe estar un espacio antes del inicio del campo editado. 2. En la segunda especificacin de salida, site el campo de edicin en las posiciones 30-43, un cdigo de edicin en la posicin 44, la posicin final del campo de edicin en las posiciones 47-51 y * en las posiciones 53-55. Puede hacer esto utilizando la funcin incorporada %EDITC concatenando el smbolo de moneda con el resultado de %EDITC del modo siguiente:
C EVAL X = '$' + %EDITC(N: 'A' : *ASTFILL)
Cuando se utiliza un cdigo de edicin para imprimir toda una matriz, dos espacios en blanco preceden a cada elemento de la matriz (excepto al primer elemento). Nota: No se puede editar una matriz utilizando la funcin incorporada %EDITC. En la Tabla 22 se resumen las funciones de los cdigos de edicin de combinacin. Los cdigos editan el campo en el formato listado a la izquierda. Un campo negativo puede puntuarse sin signo, con CR, con un signo menos () o con un signo menos flotante como se muestra en la parte superior de la figura.
Tabla 22. Cdigos de edicin de combinacin
Indicador de saldo negativo Imprime con separador de grupo S S No No Imprime saldo cero S No S No Menos flotante N 0 P Q
Sin signo 1 2 3 4
CR A B C D
J K L M
Consideraciones de edicin
Cuando especifique cualquiera de los cdigos de edicin, realice lo siguiente: v Edite los campos de un archivo no de impresora con precaucin. Si edita los campo de un campo no de impresora, tenga en cuenta el contenido de los campos editados y el efecto que cualquier operacin pudiera producirles. Por ejemplo, si utiliza el archivo como entrada, los campos que se graben y editen deben considerarse campos de caracteres, no campos numricos.
175
v Debe prestarse atencin a los datos aadidos mediante la operacin de edicin. La cantidad de puntuacin aadida aumenta la longitud total del campo de salida. Si no se tienen en cuenta estos caracteres aadidos al editar en especificaciones de salida, los campos de salida podran solaparse. v La posicin final especificada para la salida es la posicin final del campo editado. Por ejemplo, si se especifica cualquiera de los cdigos de edicin de J a M, la posicin final es la posicin del signo menos (o espacio en blanco si el campo es positivo). v El compilador asigna una posicin para el signo incluso para campos numricos sin signo.
Comas S S
Coma decimal S S S S
Signo para saldo negativo . Sin signo Sin signo Sin signo Sin signo CR CR CR CR 5 (menos) (menos) (menos) (menos) (menos flotante) (menos flotante) (menos flotante) (menos flotante) .00 0 Blancos .00 0 Blancos .00 0 Blancos .00 0 Blancos .00 0 Blancos .00 0 Blancos .00 0 Blancos .00 0 Blancos
, ,00 0 Blancos ,00 0 Blancos ,00 0 Blancos ,00 0 Blancos ,00 0 Blancos ,00 0 Blancos ,00 0 Blancos ,00 0 Blancos
0, 0,00 0 Blancos 0,00 0 Blancos 0,00 0 Blancos 0,00 0 Blancos 0,00 0 Blancos 0,00 0 Blancos 0,00 0 Blancos 0,00 0 Blancos
0. 0.00 0 Blancos 0.00 0 Blancos 0.00 0 Blancos 0.00 0 Blancos 0.00 0 Blancos 0.00 0 Blancos 0.00 0 Blancos 0.00 0 Blancos
Supresin de ceros S S S S S S S S S S S S S S S S S S S
S S
S S S S
S S
S S S S
S S
S S S S
176
Comas
Coma decimal
0,
0.
Supresin de ceros
The El cdigo de edicin X asegura un signo hexadecimal 3 para los valores positivos. Dado que el sistema lo efecta por usted, generalmente no tiene que especificar este cdigo. El cdigo de edicin Y suprime los ceros situados ms a la izquierda de los campos de fecha hasta, pero no incluyendo, el dgito anterior al primer separador. El cdigo de edicin Y inserta barras inclinadas (/) entre el mes, da y ao segn el patrn siguiente: nn/n nn/nn nn/nn/n nn/nn/nn nnn/nn/nn nn/nn/nnnn nnn/nn/nnnn nnnn/nn/nn nnnnn/nn/nn
3 2
El cdigo de edicin Z elimina el signo (ms o menos) de un campo numrico y suprime los ceros iniciales.
Nmero positivoSin posiciones decimales 1234567 1,234,567 1,234,567 1234567 1234567 1,234,567 1,234,567 1234567 1234567 1,234,567 1,234,567 1234567 1234567 1,234,567 1,234,567 1234567 1234567 1234567
Nmero negativoTres posiciones decimales 00012 .120 .120 .120 .120 .120CR .120CR .120CR .120CR .120 .120 .120 .120 .120 .120 .120 .120 00012
4 4
Nmero negativoSin posiciones decimales 000000 120 120 120 120 120CR 120CR 120CR 120CR 120 120 120 120 120 120 120 120 000000 0/01/20 120
1234567 12,345.67 12,345.67 12345.67 12345.67 12,345.67 12.345.67 12345.67 12345.67 12,345.67 12,345,67 12345.67 12345.67 12,345.67 12,345,67 12345.67 12345.67 1234567
.00
.00
.00
.00
.00
.00
.00
177
El cdigo de edicin X asegura un signo hex F para los valores positivos. Dado que el sistema lo efecta por usted, generalmente no tiene que especificar este cdigo. El cdigo de edicin Y suprime los ceros situados ms a la izquierda de los campos de fecha hasta, pero no incluyendo, el dgito anterior al primer separador. El cdigo de edicin Y inserta barras inclinadas (/) entre el mes, da y ao segn el patrn siguiente: nn/n nn/nn nn/nn/n nn/nn/nn nnn/nn/nn nn/nn/nnnn Formato utilizado con M, D nnn/nn/nnnn Formato utilizado con M, D nnnn/nn/nn Formato utilizado con Y en nnnnn/nn/nnnn Formato utilizado con Y en
la posicin 19 la posicin 19 19 19
El cdigo de edicin Z elimina el signo (ms o menos) de un campo numrico y suprime los ceros iniciales de un campo numrico. El smbolo representa un espacio en blanco. Esto puede ocurrir si un cero negativo no corresponde a un carcter imprimible.
10 r1 2 2 2 2 R R R R 2 2 2
r representa un 2 negativo. 0 0 4 4 4 4 4 4 4 4 . . . . 4 4 4 4 1 1 1 1 . . . . 4 4 4 4 . . . . 2 2 2 2 1 1 1 1 . . . 1 1 1 1 1 C C C C 2 2 2 2 1 1 1
No editado 1 2 3 4 A B C D J r L M N O P
178
Palabras de edicin
Si tiene requisitos de edicin que no pueden satisfacerse utilizando los cdigos de edicin, puede utilizar una palabra de edicin. Una palabra de edicin es un literal de caracteres o una constante con nombre especificada en las posiciones 53 - 80 de la especificacin de salida. Describe el patrn de edicin para un campo numrico y le permite especificar directamente: v Espacios en blanco v Comas y comas decimales y su posicin v Supresin de ceros no deseados v Asteriscos iniciales v El smbolo de moneda y su posicin v Adicin de caracteres de constantes v Salida del signo negativo, o CR como un indicador negativo. La palabra de edicin se utiliza como una plantilla que el sistema aplica a los datos fuente para producir la salida. Puede especificarse la palabra de edicin directamente en una especificacin de salida o puede especificarse como una constante con nombre con un nombre de constante con nombre que aparecer en el campo de palabra de edicin de la especificacin de salida. Puede obtener el valor editado del campo en las especificaciones de clculo utilizando la funcin incorporada %EDITW (palabra de edicin). Las constantes con nombre, utilizadas como palabras de edicin, estn limitadas a 115 caracteres.
179
47-51 53-80
Identifica la posicin final (a la derecha) del campo en el registro de salida. Palabra de edicin: Puede tener una longitud mxima de 26 caracteres y debe estar encerrado entre apstrofos, a menos que sea una constante con nombre. Entre el apstrofo inicial o comience la constante con nombre en la columna 53. La palabra de edicin, a menos que sea una constante con nombre, debe comenzar en la columna 54.
Para editar utilizando una palabra de edicin en especificaciones de clculo, utilice la funcin incorporada %EDITW, especificando el valor a editar como el primer parmetro y la palabra de edicin como el segundo parmetro.
Cuerpo
Estado
Expansin
El cuerpo es el espacio para los dgitos transferidos desde el campo de datos fuente al registro de salida. El cuerpo comienza en la posicin situada ms a la izquierda de la palabra de edicin. El nmero de blancos (ms un cero o un asterisco) del cuerpo de la palabra de edicin debe ser igual a o mayor que el nmero de dgitos del campo de datos fuente que se ha de editar. El cuerpo finaliza en el carcter situado ms a la izquierda y puede sustituirse por un dgito. El estado define un espacio que permite un indicador negativo, las dos letras CR o un signo menos (). El indicador negativo especificado slo aparecer en la salida si los datos fuente son negativos. Todos los caracteres de la palabra de edicin entre el ltimo carcter sustituible (blanco, carcter de supresin de ceros) y el indicador negativo tambin aparecern en la salida con el indicador negativo nicamente si los datos fuente son negativos; si los datos fuente son positivos, estas posiciones de estado se sustituyen por blancos. Las palabras de edicin sin los indicadores CR o no tienen posiciones de estado. Debe entrarse el estado despus del ltimo blanco de la palabra de edicin. Si a continuacin del ltimo blanco hay ms de un CR, slo el primer CR se trata como un estado; los CR restantes se tratan como constantes. Para que el signo menos se considere un estado, debe ser el ltimo carcter de la palabra de edicin. La expansin es una serie de smbolos & y caracteres de constantes que se entran despus del estado. En la salida, los smbolos & se sustituyen por espacios en blanco y las constantes se dejan tal cual. Si no se especifica el estado, la expansin sigue al cuerpo.
180
Asterisco: El primer asterisco del cuerpo de una palabra de edicin finaliza tambin la supresin de ceros. Los asteriscos subsiguientes que se colocan en la palabra de edicin se tratan como constantes (consulte el apartado Constantes a continuacin). Todos los ceros de la palabra de edicin que siguen a este asterisco se tratan tambin como constantes. En una palabra de edicin slo puede haber un carcter de finalizacin de supresin de ceros y dicho carcter es el primer asterisco o el primero cero de la palabra de edicin. Si se utiliza un asterisco como un carcter de finalizacin de supresin de ceros, todos los ceros iniciales que se supriman se sustituirn por asteriscos en la salida. De lo contrario, el asterisco suprime los ceros iniciales del mismo modo que se indica ms abajo para Ceros.
Palabra de edicin '* ' ' . ' * . ' * . **' Datos fuente 000000123 000000000 000056342 Aparece en el registro de salida como: *000001.23 ******0,00 ****563,42**
Tenga en cuenta que los ceros iniciales que aparecen despus de la posicin del asterisco en la salida aparecen como ceros iniciales. Slo los ceros iniciales suprimidos, incluido el que se encuentra en la posicin del asterisco, se sustituyen por asteriscos. Blanco: El blanco se sustituye por el carcter que se encuentra en la posicin correspondiente del campo de datos fuente especificado mediante el nombre de campo en las posiciones 30 a 43 de las especificaciones de salida. Se hace referencia a una posicin en blanco como una posicin de dgito. Constantes: Todos los dems caracteres que se entran en el cuerpo de la palabra de edicin se tratan como constantes. Si los datos fuente son tales que la salida coloca dgitos significativos o ceros iniciales a la izquierda de una constante, entonces dicha constante aparece en la salida. De lo contrario, se suprime la constante en la salida. Las comas y la coma decimal siguen las mismas normas que las constantes. Fjese que, en los ejemplos siguientes, la presencia del carcter de finalizacin de supresin de ceros, al igual que el nmero de dgitos significativos de los datos fuente, influyen en la salida de constantes. Pueden utilizarse las palabras de edicin siguientes para imprimir cheques. Tenga en cuenta que el segundo asterisco se trata como una constante y que, en el tercer ejemplo, las constantes anteriores al primer dgito significativo no aparecen en la salida.
Captulo 13. Edicin de campos numricos
181
Palabra de edicin '$ '$ '$ **DOLLARS& &CTS' **DOLLARS& &CTS' &DOLLARS& &CTS'
Tenga en cuenta que los ceros o asteriscos que siguen a la primera aparicin de una palabra de edicin se tratan como constantes. Esta misma norma se aplica a y CR:
Palabra de edicin ' 0. 000' ' *. 000' Datos fuente 01234 01234 Aparece en el registro de salida como: 12.34000 *12,34000
Smbolo de moneda: A un smbolo de moneda seguido directamente de un primer cero en la palabra de edicin (carcter de finalizacin de supresin de ceros) se le llama flotante. Se suprimen todos los ceros iniciales en la salida y el smbolo de moneda aparece en la salida inmediatamente a la izquierda del dgito ms significativo.
Palabra de edicin ' , ' , , $0. ' , $0. ' Datos fuente 000000012 000123456 Aparece en el registro de salida como: $.12 $1,234.56
Si el smbolo de moneda se pone en la primera posicin de la palabra de edicin, siempre aparecer en dicha posicin en la salida. Esto se llama un smbolo de moneda fijo.
Palabra de edicin '$ , '$ , '$ , , 0. ' ,0 0. ' ,* . ' Datos fuente 000123456 000000000 000123456 Aparece en el registro de salida como: $ $ 1,234.56 00.00
$****1.234,56
Un smbolo de moneda en cualquier lugar de la palabra de edicin que no vaya seguido inmediatamente de un carcter de finalizacin de supresin de ceros se trata como una constante (consulte el apartado Constantes ms arriba).
182
Decimales y comas: Los decimales y comas en el campo de salida editado estn en la misma posicin que en la palabra de edicin a menos que aparezcan a la izquierda del primer dgito significativo de la palabra de edicin. En tal caso, se sustituyen por blancos o por un asterisco. En los ejemplos siguientes, se suprimirn todos los ceros iniciales (por omisin) a menos que haya un dgito significativo a su izquierda.
Palabra de edicin ' ' ' ' . ' . ' Datos fuente 0000072 000000012 000000123 Aparece en el registro de salida como: 72 12 1.23
Ceros: El primer cero del cuerpo de la palabra de edicin se interpreta como un carcter de finalizacin de supresin de ceros. El cero se coloca donde finaliza la supresin de ceros. Los ceros subsiguientes que se coloquen en la palabra de edicin se tratan como constantes (consulte el apartado Constantes ms arriba). Cualquier cero inicial de los datos fuente se suprimen hasta e incluida la posicin del carcter de finalizacin de supresin de ceros. Los dgitos significativos aparecern en la salida en la posicin del carcter de finalizacin de supresin de ceros, o a la izquierda de este.
Palabra de edicin ' ' ' 0 0 0 ' ' ' Datos fuente 00000004 012345 012345678 Aparece en el registro de salida como: 000004 012345 12345678
Si los ceros iniciales incluyen o se extienden a la derecha del carcter de finalizacin de supresin de ceros, dicha posicin se sustituye por un blanco. Esto significa que si desea que en la salida aparezca el mismo nmero de ceros iniciales que existen en los datos fuente, el cuerpo de la palabra de edicin debe ser ms ancho que los datos fuente.
Palabra de edicin '0 '0 ' ' Datos fuente 0156 0156 Aparece en el registro de salida como: 156 0156
Las constantes (incluidas las comas y la coma decimal) que se colocan a la derecha del carcter de finalizacin de supresin de ceros son salida, incluso si no existen datos fuente. Las constantes que se colocan a la izquierda del carcter de finalizacin de supresin de datos slo son salida si los datos fuente tienen dgitos significativos que se colocaran a la izquierda de estas constantes.
Palabra de edicin ' ' 0. ' 0. ' Datos fuente 000000001 000000000 Aparece en el registro de salida como: .01 .00
183
' 0 ,
Las constantes entre el ltimo carcter sustituible y el signo o CR slo se imprimirn si el campo es negativo; de lo contrario, se imprimirn blancos en estas posiciones. Fjese en la utilizacin de los smbolos & para representar blancos:
Palabra de edicin ' , ' , , 0. &30&DAY&CR' , 0. &30&DAY&CR' Datos fuente 000000123 000000123 Aparece en el registro de salida como: 1.23 30 DAY CR 1.23
Tenga en cuenta que CR en medio de una palabra puede detectarse como una indicacin de un valor de campo negativo. Si es necesaria una palabra como SECRET, utilice la codificacin del ejemplo siguiente.
184
185
186
Inicializacin de datos
Los datos se inicializan con la palabra clave INZ en la especificacin de definicin. Puede especificar un valor inicial como un parmetro en la palabra clave, o bien puede especificar la palabra clave sin ningn parmetro y utiliza los valores iniciales por omisin. Los valores iniciales por omisin de los diversos tipos de datos se describen en el Captulo 9. Tipos de datos y formatos de datos. Consulte el Captulo 12. Utilizacin de matrices y tablas para obtener informacin sobre la inicializacin de matrices.
187
188
Parte 3. Especificaciones
En este apartado se describen las especificaciones de VisualAge RPG: v Informacin comn a diversas especificaciones como, por ejemplo, la sintaxis de palabras clave y las reglas de continuacin. v Todas las especificaciones se describen en el orden en que debern ser entradas en el programa. Cada descripcin de especificacin da una lista de todos los campos de la especificacin y explica todas las entradas posibles.
189
190
191
** b
Datos de programa
P C D P O C I D F H
Entrada Salida Definicin
Procedimiento
Clculo
Procedimiento
Subprocedimiento
Clculo
Definicin
Descripcin archivo
Control
Figura 69. Orden de los tipos de especificaciones en un programa fuente VisualAge RPG
Las especificaciones de control (cabecera) proporcionan informacin sobre la generacin de programas y la ejecucin del programa compilado. Consulte el apartado Captulo 16. Especificaciones de control para obtener una descripcin de las entradas de esta especificacin. Las especificaciones de descripcin de archivo definen todos los archivos del programa. Consulte el apartado Captulo 17. Especificaciones de descripcin de archivo para obtener una descripcin de las entradas de esta especificacin. Las especificaciones de definicin definen los elementos que se utilizan en el programa. En esta especificacin se definen las matrices, las tablas, las estructuras de datos, los subcampos, las constantes, los campos autnomos, los atributos de eventos y los prototipos y sus parmetros. Consulte el apartado Captulo 18. Especificaciones de definicin para obtener una descripcin de las entradas de esta especificacin. Las especificaciones de entrada describen los registros y campos de los archivos de entrada e indican cmo el programa utiliza los registros y los campos. Consulte el apartado Captulo 19. Especificaciones de entrada para obtener una descripcin de las entradas de esta especificacin. Las especificaciones de clculo describen los clculos que ha de realizar el programa e indican el orden en el que se llevan a cabo. Las especificaciones de clculo pueden controlar ciertas operaciones de entrada y salida. Cuando el destino son los componentes, esta seccin incluye subrutinas de accin y subrutinas de usuario autnomas. EXE y NOMAIN DLL no tienen una seccin de especificaciones de clculo. Consulte el apartado Captulo 20. Especificaciones de clculo para obtener una descripcin de las entradas de esta especificacin. En el apartado Captulo 25. Cdigos de operacin se describen los cdigos de operacin que se codifican en la especificacin de clculo.
192
Las especificaciones de salida describen los registros y los campos e indican cundo los ha de grabar el programa. Consulte el apartado Captulo 21. Especificaciones de salida para obtener una descripcin de las entradas de esta especificacin.
Especificaciones de subprocedimiento
P Las especificaciones de procedimiento describen la definicin de interfaz de procedimiento de un programa o procedimiento con prototipo. Consulte el apartado Captulo 22. Especificaciones de procedimiento para obtener una descripcin de las entradas de esta especificacin. Las especificaciones de definicin definen los elementos utilizados en los procedimientos con prototipo. En esta especificacin se incluyen las definiciones de interfaz de procedimiento, los parmetros de entrada y otros elementos locales. Consulte el apartado Captulo 18. Especificaciones de definicin para obtener una descripcin de las entradas de esta especificacin. Las especificaciones de clculo llevan a cabo la lgica de un procedimiento con prototipo. Consulte el apartado Captulo 20. Especificaciones de clculo para obtener una descripcin de las entradas de esta especificacin.
Datos de programa
A continuacin de todas las especificaciones fuente se incluyen registros fuente con datos de programa. La primera lnea de la seccin de datos debe empezar con **. Si lo desea, puede indicar el tipo de datos de programa que se incluir continuacin de **, especificando la palabra clave CTDATA . Al asociar los datos de programa con esta palabra clave, puede situar los grupos de datos de programa en cualquier orden a continuacin de los registros fuente. La primera entrada de cada registro de entrada debe empezar en la posicin 1. No es necesario rellenar todo el registro con entradas. Los elementos de matriz con entradas no utilizadas se inicializarn con el valor por omisin. Para obtener ms informacin acerca de cmo entrar registros de matrices en tiempo de compilacin, vea Reglas para los registros fuente de matriz en la pgina 161. Las especificaciones que ofrecen soporte para las palabras clave (Control, Descripcin de archivo, Definicin y Procedimiento) permiten formato libre en los campos de palabras clave. La especificacin de clculo permite formato libre con los cdigos de operacin que ofrecen soporte para el factor 2 ampliado. De lo contrario las entradas son especificas segn la posicin. Para representar esto, cada ilustracin del cdigo VisualAge RPG est en formato de listado con una escala dibujada en la parte superior. Esta referencia contiene una descripcin detallada de las especificaciones individuales. Se describe cada campo y sus entradas posibles. El Captulo 25. Cdigos de operacin en la pgina 367, describe los cdigos de operacin que se codifican en la especificacin de Clculo, que se describe en el Captulo 20. Especificaciones de clculo en la pgina 281.
193
Entradas comunes
Las entradas siguientes son comunes a todas las especificaciones VisualAge RPG: v Las posiciones 1-5 pueden utilizarse para comentarios. v La posicin 6 indica el tipo de especificacin. Puede utilizar los cdigos de letra siguientes: Entrada Tipo de especificacin H F D I C O Control Descripcin de archivo Definicin Entrada Clculo Salida
P Procedimiento v Sentencias de comentarios La posicin 7 contiene un asterisco (*). Indica que se trata de una lnea de comentarios independientemente de cualquier otra entrada de la especificacin. Las posiciones 6 - 80 estn en blanco v Las posiciones 7 - 80 estn en blanco y la posicin 6 contiene una especificacin vlida. Esta es una lnea vlida, no un comentario, y entran en vigor las reglas de secuencia.
donde: v Los parmetros van entre parntesis (). Nota: No se deben especificar parntesis si no hay parmetros. v Se utilizan signos de dos puntos (:) para separar varios parmetros. Se han utilizado los convenios de notacin siguientes para mostrar qu parmetros son opcionales y cules son obligatorios: v Las llaves { } indican parmetros opcionales o elementos opcionales de los parmetros. v Unos puntos suspensivos (...) indican que el parmetro puede repetirse. v Un signo de dos puntos (:) establece una separacin entre los parmetros e indica que es posible especificar ms de uno. Todos los parmetros que estn separados por dos puntos son obligatorios a menos que vayan entre llaves. v Una barra vertical (|) indica que slo se puede especificar un parmetro para la palabra clave. v Un espacio en blanco entre los parmetros de la palabra clave indica que se puede especificar ms de uno. Nota: Las llaves, los puntos suspensivos y las barras verticales no son parte de la sintaxis de las palabras clave y no deben figurar en el fuente.
194
llaves {}
RENAME(Ext_format :Int_format)
RENAME (nameE: nameI) IGNORE (recformat1: recformat2: recformat3) FLTDIV OPTIONS (*OMIT: *VARSIZE: *STRING: *RIGHTADJ)
puntos IGNORE(recformat suspensivos {:recformat...}) (...) barra vertical (|) espacio en blanco FLTDIV{(*NO | *YES)} OPTIONS(*OMIT *VARSIZE *STRING *RIGHTADJ)
Reglas de continuacin
Los campos v El campo v El campo v El campo v El campo v El campo v El campo que pueden continuarse son: de palabras clave de la especificacin de control de palabras clave de la especificacin de descripcin de archivo de palabras clave de la especificacin de definicin factor 2 ampliado de la especificacin de clculo constante/palabra de edicin en la especificacin de salida Nombre en la definicin o la especificacin de procedimiento
Las reglas generales para la continuacin son las siguientes: v La lnea de continuacin debe ser una lnea vlida para la especificacin que se est continuando (H, F, D, C o O en la posicin 6). v No debe utilizarse caracteres especiales cuando se contina especificaciones en varias lneas, excepto cuando debe dividirse un literal o nombre. Por ejemplo, los siguientes pares de lneas son equivalentes. En el primer par, el signo ms (+) es un operador, an cuando aparezca al final de una lnea. En el segundo par, el signo ms es un carcter de continuacin.
C C C C C C eval eval eval eval x = a + b x = a + b x = 'abc' x = 'ab+ c'
v nicamente se permiten lneas en blanco, lneas de especificacin vacas o lneas de comentario entre lneas continuadas. v La continuacin puede aparecer despus de un smbolo completo. Los smbolos son: Nombres (por ejemplo, palabras clave, nombres de archivo, nombres de campo)
Captulo 15. Acerca de las especificaciones VisualAge RPG
195
Parntesis El carcter separador (:) Operadores de expresin Funciones incorporadas Palabras especiales Literales v Tambin puede producirse una continuacin en un literal: En el caso de los literales de caracteres, fecha, hora e indicacin de la hora: - Un guin (-) indica que la continuacin est en la primera posicin disponible del campo continuado - Un signo ms (+) indica continuacin con el primer carcter no en blanco o despus de la primera posicin del campo continuado Para los literales grficos: - Puede utilizarse el guin (-) o el signo ms (+) para indicar una continuacin. Para los literales numricos: - Se utiliza un carcter no de continuacin - Un literal numrico contina con un carcter numrico o coma decimal en la lnea de continuacin del campo continuado Para los literales hexadecimales y UCS-2: - Puede utilizarse un guin (-) o un signo ms (+) para indicar una continuacin - El literal se continuar con el primer carcter no en blanco en la lnea siguiente v Tambin puede tener lugar una continuacin dentro de un nombre en entradas de formato libre En la entrada de nombres para especificaciones de Definicin y procedimiento. Para obtener ms informacin acerca de la continuacin de nombres en la entrada de nombres, vea Campo de nombre de especificacin de definicin y procedimiento en la pgina 199. En la entrada de palabras clave para especificaciones de Archivo y definicin. En la entrada de factor 2 ampliado de las especificaciones de Clculo. En todos los casos, el nombre se contina codificando con puntos suspensivos (...) al final del nombre parcial, sin espacios en blanco.
196
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D Keywords-cont++++++++++++++++++++++++ * Definir un campo de 10 caracteres con un nombre largo. * La segunda definicin es un puntero inicializado con la direccin * de la variable con el nombre largo. D NombreDeCampoBastanteLargoQueNoSiempreCabeEnUnaLnea... D S 10A D Ptr S * inz(%addr(NombreDeCampoBastanteLargo... D QueNoSiempreCabe... D EnUnaLnea)) D NombreCorto S 5A *.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++++ C Extended-factor2-++++++++++++++++++++++++++++ * Utilizar el nombre largo en una expresin * Puede dividirse el nombre siempre que sea necesario. C EVAL NombreDeCampoBastanteLargoQue... C NoSiempreCabeEnUnaLnea = 'abc' * Puede dividirse as cualquier nombre C EVAL P... C tr = %addr(Nombre... C Corto)
197
198
v La especificacin contina en la posicin 53 o en una posicin posterior de la siguiente especificacin de salida v Las posiciones 7-52 de la lnea de continuacin deben estar en blanco.
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 * O.............N01N02N03Field+++++++++YB.End++PConstant/editword/DTformat+++ O Continue Constant/editword+++ O 80 'Cinco lobitos tiene la lobaO* Aqu slo se permite una lnea de comentarios o completamente en blanco O , blancos y negros '
199
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D Keywords-cont++++++++++++++++++++++++ D* Nombre largo sin lneas de nombre continuados: D RatherLongName S 10A D* Nombre largo que utiliza 1 lnea de nombre continuado: D NameThatIsEvenLonger... D C 'Esta es la constante D que representa el nombre.' D* Nombre largo que utiliza 1 lnea de nombre continuado: D NameThatIsSoLongItMustBe... D Continued S 10A D* Las matrices de tiempo de compilacin pueden tener nombres largos: D CompileTimeArrayContainingDataRepresentingTheNamesOfTheMonthsOf... D TheYearInGermanLanguage... D S 20A DIM(12) CTDATA PERRCD(1) D* Nombre largo que utiliza 3 lneas de nombre continuado: D ThisNameIsSoMuchLongerThanThe... D PreviousNamesThatItMustBe... D ContinuedOnSeveralSpecs... D PR 10A D parm_1 10A VALUE CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* Nombres largos definidos en espec. clc: C LongTagName TAG C *LIKE DEFINE RatherLongNameQuiteLongName +5 PName+++++++++++..B...................Keywords+++++++++++++++++++++++++++++ PContinuedName+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ P* Nombre largo especificado en espec. Procedimiento: P ThisNameIsSoMuchLongerThanThe... P PreviousNamesThatItMustBe... P ContinuedOnSeveralSpecs... P B D ThisNameIsSoMuchLongerThanThe... D PreviousNamesThatItMustBe... D ContinuedOnSeveralSpecs... D PI 10A D parm_1 10A VALUE D* Cuerpo del procedimiento D* P ThisNameIsSoMuchLongerThanThe... P PreviousNamesThatItMustBe... P ContinuedOnSeveralSpecs... P E
200
201
Nota: No especifique parntesis si no hay parmetros. v Se utilizan signos de dos puntos (:) para separar varios parmetros. Se han utilizado los convenios de notacin siguientes para mostrar qu parmetros son opcionales y cules son obligatorios: v Las llaves { } indican parmetros opcionales o elementos opcionales de los parmetros. v Unos puntos suspensivos (...) indican que el parmetro puede repetirse. v Un signo de dos puntos (:) establece una separacin entre los parmetros e indica que es posible especificar ms de uno. Todos los parmetros que estn separados por dos puntos son obligatorios a menos que vayan entre llaves. v Una barra vertical (|) indica que slo se puede especificar un parmetro para la palabra clave. v Un espacio en blanco entre los parmetros de la palabra clave indica que se puede especificar ms de uno. Nota: Las llaves, los puntos suspensivos y las barras verticales no son parte de la sintaxis de las palabras clave y no deben figurar en el fuente. Si se necesita ms espacio para las palabras clave de especificacin de control, el campo de palabra clave puede continuarse en las lneas que le siguen. Consulte los apartados Sentencia de especificacin de control en la pgina 201 y Campo de palabras clave de especificacin de control en la pgina 197.
202
Si no se especifica la palabra clave ALWNULL, se utilizar el valor especificado en el mandato. Si desea obtener ms informacin, consulte el apartado Soporte de valores nulos de base de datos en la pgina 128
CACHE(*YES | *NO)
La palabra clave CACHE especifica que la aplicacin utilizar las descripciones de archivos remotos que estn almacenadas en la carpeta de antememoria de la estacin de trabajo. La primera vez que se utilice la opcin CACHE(*YES), se crear una lista de descripciones de archivos remotos. Cada vez que se utilice con posterioridad, el proceso de compilacin acceder a esta informacin en lugar de acceder a los archivos de AS/400.
CACHEREFRESH(*YES | *NO)
La palabra clave CACHEREFRESH especifica que las descripciones de archivos remotos que hay en la carpeta de antememoria deben actualizarse antes de que comience el proceso de compilacin. Si especifica CACHE(*NO), se utilizarn las descripciones existentes de archivos remotos.
203
COPYNEST(nmero)
La palabra clave COPYNEST especifica la profundidad mxima a la que se puede llevar la jerarquizacin para instrucciones /COPY. La profundidad puede ser mayor o igual a 1 y menor o igual a 2048. La profundidad por omisin es 32.
COPYRIGHT(serie de copyright)
La palabra clave COPYRIGHT proporciona informacin de copyright. La serie de copyright es un literal de caracteres con una longitud mxima de 256. El literal puede seguir en una especificacin de continuacin. (En el apartado Reglas de continuacin en la pgina 195 hallar la reglas que rigen para la utilizacin de lneas de continuacin.) Si no se especifica la palabra clave COPYRIGHT, la informacin de copyright no se aade al mdulo o programa creado.
CURSYM(sim)
La palabra clave CURSYM especifica un carcter utilizado como un smbolo de moneda en la edicin. El smbolo debe ser un solo carcter entre comillas. Se puede utilizar cualquier carcter del juego de caracteres VisualAge RPG. (Vase Captulo 1. Nombres simblicos y palabras reservadas en la pgina 3.) Los caracteres siguientes son excepciones:
0 (cero) & (smbolo &) C (letra C) * (asterisco) . (punto) R (letra R) , (coma) (signo ms) Blanco
Si no se especifica la palabra clave, el smbolo del dlar ($) es el valor por omisin para el smbolo de moneda.
CVTOEM(*YES | *NO)
La palabra clave CVTOEM especifica que debe utilizarse la conversin OEM cuando se realizan operaciones de E/S en los archivos locales. Si se especifica CVTOEM(*NO), no se llevar a cabo la conversin OEM.
CVTOPT(*{NO}VARCHAR *{NO}VARGRAPHIC)
La palabra clave CVTOPT sirve para determinar cmo manejar el compilador VARPG los tipos de datos de longitud variable que se recuperen de archivos de base de datos descritos externamente. Se puede especificar parte o la totalidad de los tipos de datos en el orden en que se desee. No obstante, si se especifica un tipo de datos, no se puede utilizar el parmetro *NOxxxx correspondiente a dicho tipo de datos y viceversa. Por ejemplo, si especifica *VARCHAR, no puede especificar *NOVARCHAR y viceversa. Separe los parmetros un signo de dos puntos. El mismo parmetro no puede especificarse ms de una vez. Nota: Si la palabra clave CVTOPT no contiene un miembro de un par, se utilizar el valor especificado en el mandato para el tipo de datos en concreto. Por ejemplo, si se especifica la palabra clave CVTOPT(*NOVARCHAR) en la especificacin de control, para el par (*VARGRAPHIC, *NOVARGRAPHIC) se utilizar lo que se haya especificado de forma implcita o explcita en el mandato.
204
Si se especifica *VARCHAR, los datos de tipo carcter de longitud variable se declaran como campos de tipo carcter de longitud fija. Si se especifica *NOVARCHAR, no se convertirn los datos de tipo carcter de longitud variable. Si se especifica *VARGRAPHIC, los datos de tipo grfico DBCS (juego de caracteres de doble byte) de longitud variable se declaran como campos de tipo carcter de longitud fija. Si se especifica *NOVARGRAPHIC, no se convertirn los datos de tipo grfico DBCS (juego de caracteres de doble byte) de longitud variable. Si no se especifica la palabra clave CVTOPT, se utilizarn los valores especificados en el mandato.
DATEDIT(fmt{separador})
La palabra clave DATEDIT especifica el formato de los campos numricos cuando se utiliza el cdigo de edicin Y. El carcter separador es opcional. El valor (fmt) puede ser *DMY, *MDY o *YMD. El separador por omisin es /. Puede utilizarse el carcter separador & para especificar un separador en blanco.
DATFMT(fmt{separador})
La palabra clave DATFMT especifica el formato de fecha interno para los literales de fecha y el formato por omisin para los campos de fecha dentro del programa. Puede especificar un formato de fecha interno diferente para un campo determinado especificando el formato con la palabra clave DATFMT en la especificacin de definicin para dicho campo. El valor por omisin es el formato *ISO. Para obtener ms informacin acerca de los formatos externos, consulte el apartado Formatos internos y externos en la pgina 95. En la Tabla 27 se describen los diferentes formatos de fecha y sus separadores.
Tabla 27. Formatos de fecha externos para tipos de datos de fecha
Nombre RPG *MDY *DMY *YMD *JUL *ISO *USA *EUR *JIS Descripcin Formato (separador por omisin) mm/dd/aa dd/mm/aa aa/mm/dd aa/ddd Separadores vlidos / - . , & / - . , & / - . , & / - . , & / . 8 8 6 10 10 10 10 Longitud Ejemplo
International Standards Organization aaaa-mm-dd Estndar EE.UU. IBM Estndar europeo IBM Estndar industrial japons era cristiana mm/dd/aaaa dd.mm.aaaa aaaa-mm-dd
DEBUG{(*NO | *YES)}
La palabra clave DEBUG determina si se genera informacin de depuracin.
Captulo 16. Especificaciones de control
205
Si no se especifica esta palabra clave o bien si se especifica con *NO, no se generar informacin de compilacin alguna.
DECEDIT(valor)
Esta palabra clave especifica el carcter utilizado como coma decimal para nmeros decimales editados. Los ceros iniciales se imprimen cuando el valor absoluto del nmero es menor que 1. El valor por omisin es . (punto). Los valores posibles son: . , 0. 0, La coma decimal es un punto; no se imprime el cero inicial (.123) La coma decimal es una coma; no se imprime el cero inicial (,123) La coma decimal es un punto; se imprime el cero inicial (0.123) La coma decimal es una coma; se imprime el cero inicial (0,123)
EXE
La palabra clave EXE indica que se trata de un mdulo compuesto de un procedimiento principal y de subprocedimientos. Todas las subrutinas (BEGSR) deben ser locales a un procedimiento. El EXE debe contener un procedimiento cuyo nombre coincida con el nombre del archivo fuente. Ser el punto de entrada principal para el EXE, es decir, el procedimiento principal. Para mdulos EXE, debe tener en cuenta lo siguiente: v En este fuente no se permiten cdigos de operacin GUI, lo que incluye START, STOP, SETATR, GETATR, %SETATR, %GETATR, SHOWWIN, CLSWIN y READS. Se puede utilizar DSPLY. v No se permiten *INZSR y *TERMSR. v No se permiten parmetros *ENTRY. Si existen parmetros de entrada, se especifican en la definicin de parmetros para el procedimiento principal y se deben pasar por valor, es decir, se debe especificar la palabra clave VALUE para cada parmetro. v La palabra clave EXPORT no est permitida en la especificacin P Begin. v El valor de retorno para el procedimiento principal se debe definir como un nmero binario o entero de precisin cero(0).
EXPROPTS(*MAXDIGITS | *RESDECPOS)
La palabra clave EXPROPTS (opciones de expresin) especifica el tipo de reglas de precisin que deben utilizarse para un programa completo. Si no se especifica o si se especifica con *MAXDIGITS, se aplican las reglas de precisin por omisin. Si se especifica EXPROPTS, con *RESDECPOS, se aplican las reglas de precisin de Posicin decimal de resultado y se fuerzan los resultados intermedios en las expresiones para que no tengan menos posiciones decimales que el resultado. Nota: Los ampliadores de cdigos de operaciones R y M son los mismos que EXPROPTS(*RESDECPOS) y EXPROPTS(*MAXDIGITS) respectivamente, pero para expresiones individuales de formato libre.
EXTBININT{(*NO | *YES)}
La palabra clave EXTBININT se utiliza para procesar campos descritos externamente con formato externo binario y cero posiciones decimales como si estuvieran en formato de entero externo. Si no se especifica o si se especifica con *NO, un campo binario descrito externamente se procesa con un formato binario
206
externo. Si se especifica EXTBININT, opcionalmente con *YES, un campo descrito externamente se procesa tal y como se indica a continuacin:
Definicin DDS B(n,0) donde 1 n 4 B(n,0) donde 5 n 9 Formato externo RPG I(5) I(10)
Al especificar la palabra clave EXTBININT, el programa puede utilizar todo el rango de valores binarios DDS disponibles. (El rango de valores binarios DDS es el mismo que para los enteros con signo: de -32768 a 32767 para un campo de 5 dgitos o de -2147483648 a 2147483647 para un campo de 10 dgitos.) Nota: Cuando se especifica la palabra clave EXTBININT, todos los subcampos descritos externamente que sean binarios con posiciones decimales cero se definen con un formato de entero interno.
FLTDIV{(*NO | *YES)}
La palabra clave FLTDIV indica que todas las operaciones de divisin de las expresiones se calculan en punto flotante y devuelven un valor de tipo flotante. Si no se especifica o si se especifica con *NO, las operaciones de divisin se llevan a cabo en formato decimal empaquetado (a menos que uno de los dos operandos ya est en formato flotante). Si se especifica FLTDIV, opcionalmente con *YES, todas las operaciones de divisin se llevan a cabo en formato flotante (garantizando que el resultado siempre tenga 15 dgitos de precisin).
GENLVL(nmero)
La palabra clave GENLVL controla la creacin del objeto. El objeto se crea si el nivel de gravedad de todos los errores que se han encontrado en el transcurso de compilacin es menor o igual que el nivel de gravedad de generacin especificado. El valor debe estar comprendido entre 0 y 20, inclusive. Si los errores superan el nivel de gravedad 20, no se crear el objeto. Si no se especifica la palabra clave GENLVL, se utilizar el valor especificado en el mandato.
INDENT(*NONE | valor-carcter)
La palabra clave INDENT especifica si se debe sangrar las operaciones estructuradas en el listado de fuente con el fin de facilitar la lectura de las mismas. Tambin especifica los caracteres que se utilizarn para marcar las clusulas de las operaciones estructuradas. Si se especifica *NONE, no se sangrarn las operaciones estructuradas en el listado del fuente. Si se especifica valor-carcter, se sangrar el listado del fuente en las clusulas de las operaciones estructuradas. Se marcar la alineacin de las sentencias y de las clusulas utilizando los caracteres que desee. Puede escoger un literal cualquiera que tenga una longitud mxima de 2 caracteres. Nota: Es posible que el sangrado no aparezca tal y como estaba previsto si hay errores en el fuente.
207
INTPREC(10 | 20)
La palabra clave INTPREC se utiliza para especificar la precisin decimal de los valores intermedios enteros y sin signo en las operaciones de aritmtica binaria que ocurren en las expresiones. Los valores intermedios enteros y sin signo se mantienen siempre en el formato de 8 bytes. Esta palabra clave afecta solamente al modo en que se convierten los valores intermedios enteros y sin signo a formato decimal cuando se utilizan en operaciones de aritmtica binaria (+, -, *, /). INTPREC(10), el valor por omisin, indica una precisin decimal de 10 dgitos para las operaciones enteras y sin signo. No obstante, si por lo menos un operando de la expresin es un campo entero o sin signo de 8 bytes, el resultado de la expresin tiene una precisin decimal de 20 dgitos a pesar del valor de INTPREC. INTPREC(20) indica que la precisin decimal de las operaciones de entero y sin signo es de 20 dgitos.
NOMAIN
La palabra clave NOMAIN indica que no existe ninguna accin, ni subrutinas de usuario autnomas en el mdulo. Un mdulo NOMAIN nicamente contiene subprocedimientos. El objeto resultante de la compilacin es una DLL, que pueden utilizar otras aplicaciones. Para las DLL NOMAIN, debe tenerse en cuenta lo siguiente: v La DLL slo debe constar de procedimientos. Todas las subrutinas (BEGSR) deben ser locales a un procedimiento. v En este fuente no se permiten cdigos de operacin GUI, lo que incluye START, STOP, SETATR, GETATR, %SETATR,%GETATR;, SHOWWIN, CLSWIN y READS. Se puede utilizar DSPLY. No obstante, si se llama al procedimiento que lo contiene desde una DLL VisualAge RPG, el cdigo de operacin DSPLY no realiza ninguna funcin. v No se permite *INZSR; ni *TERMSR;. v No se permiten parmetros *ENTRY;. Vea Programacin con VisualAge para RPG para obtener ms informacin acerca de la codificacin y la llamada de varios procedimientos.
208
Por ejemplo, si especifica *XREF, no puede especificar tambin *NOXREF y viceversa. Separe las opciones con un signo de dos puntos. La misma opcin no puede especificarse ms de una vez. Nota: Si la palabra clave OPTION no contiene un miembro de un par, se utilizar el valor especificado en el mandato para la opcin en concreto. Por ejemplo, si se especifica la palabra clave OPTION(*XREF : *NOGEN : *NOSECLVL : *SHOWCPY) en la especificacin de control, para los pares (*EXT, *NOEXT), (*EXPDDS, *NOEXPDDS) y (*SHOWSKP, *NOSHOWSKP) se utilizar lo que se haya especificado de forma implcita o explcita en el mandato. Si se especifica *XREF, se elaborar un listado de referencias cruzadas (segn convenga) para el miembro fuente. *NOXREF indica que no se elaborar ningn listado de referencias cruzadas. Si se especifica *GEN, se crear un objeto programa si el nivel de gravedad ms alto devuelto por el compilador no supera el nivel de gravedad especificado en la opcin GENLVL. *NOGEN no crea ningn objeto. Si se especifica *SECLVL, se imprimir el texto de los mensajes de segundo nivel en la lnea que sigue al texto de los mensajes de primer nivel en la seccin de resumen de mensajes. *NOSECLVL no imprimir el texto de los mensajes de segundo nivel en la lnea que sigue al texto de los mensajes de primer nivel. Si se especifica *SHOWCPY, en el listado del compilador figurarn los registros fuente de los miembros incluidos por la directiva del compilador /COPY. *NOSHOWCPY no muestra los registros fuente de los miembros incluidos por la directiva del compilador /COPY. Si se especifica *EXPDDS, en la informacin de los campos de clave y en el listado se visualizar la ampliacin de los archivos descritos externamente. *NOEXPDDS no muestra en la informacin de los campos de clave ni en el listado la ampliacin de los archivos descritos externamente. Si se especifica *EXT, en el listado se incluirn los procedimientos y campos externos a los que se hecho referencia en el transcurso de la compilacin. *NOEXT no muestra en el listado la lista de los procedimientos y campos externos a los que se hecho referencia en el transcurso de la compilacin. Si se especifica *SHOWSKP, se mostrarn todas las sentencias en la parte del fuente del listado, independientemente de si el compilador se las ha saltado o no. *NOSHOWSKP no muestra en la parte del fuente del listado las sentencias que se ha saltado el compilador. El compilador se salta sentencias como resultado de las directivas /IF, /ELSEIF o /ELSE. Si no se especifica la palabra clave OPTION, se utilizarn los valores especificados en el mandato.
SQLBINDFILE(archivo)
La palabra clave SQLBINDFILE especifica que se puede crear un archivo de enlace SQL. Si lo desea, puede especificar un nombre de archivo de enlace totalmente calificado entre apstrofos. Dicho nombre puede tener una longitud mxima de 8 caracteres.
209
Un archivo de enlace permite a la aplicacin retrasar el enlace a una base de datos y acceder a muchas bases de datos. Esto se lleva a cabo utilizando el mandato SQLBIND antes de ejecutar la aplicacin. No se generar ningn archivo de paquete a menos que se especifique la palabra clave SQLPACKAGENAME. Las aplicaciones se pueden construir con enlace habilitado, es decir, con la palabra clave SQLPACKAGENAME especificada, o con enlace diferido (sin nombre de paquete). La construccin con el enlace habilitado genera un archivo de paquete y lo almacena en la base de datos. La construccin con el enlace diferido extrae del archivo fuente los datos necesarios para crear el paquete y almacena esta informacin en un archivo de enlace.
SQLDBBLOCKING(*YES | *NO)
La palabra clave SQLDBBLOCKING especifica si se realiza una agrupacin por bloques en algn cursor. Especifique SQLDBBLOCKING(*YES) para realizar una agrupacin por bloques en algn cursor. Si utiliza la agrupacin de registros por bloques y especifica SQLISOLATIONLVL(*RR), un nivel de aislamiento de cursor de slo lectura, el Gestor de Bases de Datos del servidor de base de datos devolver un bloque de filas al cliente de base de datos en una transmisin de red. Estas filas se recuperan de una en una del cliente de base de datos cuando el Gestor de Bases de Datos procesa una peticin FETCH. Cuando todas las filas del bloque se hayan recuperado mediante la operacin FETCH, el Gestor de Bases de Datos del cliente de base de datos enva otra peticin a la base de datos remota, hasta que se recuperan todas las filas de salida. La agrupacin de registros por bloques puede dar resultados que no sean totalmente coherentes con la base de datos cuando se utiliza con los niveles de aislamiento de estabilidad de cursor, SQLISOLATIONLVL(*CS), o lectura no comprometida, SQLISOLATIONLVL(*UR). Con la estabilidad de cursor y la lectura no comprometida, la fila que la aplicacin est recuperando del bloque no se bloquea en la base de datos remota. Por lo tanto, otra aplicacin puede estar actualizando la fila de la base de datos mientras su aplicacin est leyendo la fila del bloque. Si se especifica el nivel de aislamiento de lectura repetible, se bloquean todas las filas de la base de datos a las que se accede hasta que finaliza la unidad de trabajo, pero restringe las actualizaciones por parte de otros procesos. Especifique SQLDBBLOCKING(*NO) si no desea que se efecte ninguna agrupacin por bloques en ningn cursor. Cuando una sentencia SELECT devuelve varias filas, la aplicacin debe declarar un cursor y utilizar la sentencia FETCH para recuperar las filas de una en una. Con una base de datos remota, esto significa que cada peticin y cada respuesta pasan por la red. Si el nmero de filas es elevado, el trfico de la red aumentar significativamente.
SQLDBNAME(base de datos)
La palabra clave SQLDBNAME especificar el nombre de la base de datos DB2 a la que hacen referencia las sentencias SQL intercaladas en la aplicacin. El nombre debe estar entre apstrofos y puede tener una longitud mxima de 8 caracteres.
210
*ISO
*USA Formato estndar para los EE.UU. de IBM. *JIS Formato estndar de la industria japonesa para la era cristiana.
SQLPACKAGENAME(paquete.txt)
La palabra clave SQLPACKAGENAME especifica que se crear un archivo de paquete que contendr las sentencias SQL ejecutables. Si lo desea, puede especificar un nombre de paquete totalmente calificado entre apstrofos. Dicho nombre puede tener una longitud mxima de 8 caracteres. Una aplicacin del Gestor de Base de Datos utiliza un archivo de paquete para cada archivo fuente construido y utilizado para construir la aplicacin. Cada paquete es una entidad por separado y no tiene relacin con otros paquetes utilizados en la misma o en otras aplicaciones. Los paquetes se crean ejecutando el precompilador contra un archivo fuente con el enlace habilitado o ejecutando el enlazador (mandato SQLBIND) contra uno o varios nombres de DB2.
SQLPASSWORD(contrasea)
La palabra clave SQLPASSWORD especifica la contrasea del ID de usuario que accede a la base de datos SQL. La contrasea debe estar entre apstrofos.
211
SQLUSERID(ID de usuario)
La palabra clave SQLUSERID especifica el ID de usuario que se conecta a la base de datos SQL. El ID de usuario debe estar entre apstrofos.
TIMFMT(fmt{separador})
La palabra clave TIMFMT especifica el formato interno de literales de hora y el formato por omisin para campos de hora en el programa. Puede especificar un formato de hora interno diferente para un campo determinado especificando el formato con la palabra clave TIMFMT en la especificacin de definicin para dicho campo. El valor por omisin es *ISO. Si desea obtener ms informacin acerca de los formatos internos, consulte el apartado Formatos internos y externos en la pgina 95 En la Tabla 28 se muestran los formatos de hora soportados y sus separadores:
Tabla 28. Formatos de hora externos para tipos de datos de hora
Formato (separador por omisin) hh:mm:ss hh.mm.ss
Estndar EE.UU. IBM. AM hh:mm AM y PM pueden ser cualquier o hh:mm combinacin de PM maysculas y minsculas Estndar europeo IBM hh.mm.ss
*EUR *JIS
. :
8 8
14.00.00 14:00:00
TRUNCNBR(*YES | *NO)
La palabra clave TRUNCNBR especifica si se traslada el valor truncado al campo de resultado o si se genera un error cuando se produzca un desbordamiento numrico mientras de ejecuta el objeto. Nota: La opcin TRUNCNBR no se aplica a los clculos realizados dentro de expresiones. (Las expresiones se hallan en el campo Factor ampliado 2.) Si se produce un desbordamiento en dichos clculos, se producir siempre un error. Si se especifica *YES, no se tendr en cuenta el desbordamiento numrico y se trasladar el valor truncado al campo de resultado. Si se especifica *NO, se generar un error en tiempo de ejecucin cuando se detecte un desbordamiento numrico. Si no se especifica la palabra clave TRUNCNBR, se utilizar el valor especificado en el mandato.
212
213
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 F.....................................Keywords+++++++++++++++++++++++++++++Comments++++++++++++
Figura 79. Diseo de la lnea de continuacin de las palabras clave de descripcin de archivo
214
I O U C
Un archivo de entrada puede ser un archivo DISK local o remoto Un archivo de salida puede ser un archivo DISK local o remoto Un archivo de actualizacin puede ser un archivo DISK local o remoto Un archivo combinado (entrada/salida) debe ser un archivo DISK remoto
Archivos de entrada
Un programa lee informacin desde un archivo de entrada. El archivo de entrada puede contener registros de datos, matrices o tablas.
Archivos de salida
Un archivo de salida es un archivo en el que se graba informacin.
Archivos de actualizacin
Un archivo de actualizacin es un archivo cuyos registros pueden leerse y actualizarse. La actualizacin altera los datos en uno o ms campos de cualquier registro contenido en el archivo y vuelve a grabar dicho registro en el mismo archivo en el que lo ha ledo. Si se han de suprimir registros, debe especificarse el archivo como un archivo de actualizacin.
Archivos combinados
Un archivo combinado es un archivo de entrada y de salida. Cuando se procesa un archivo combinado, el registro de salida contiene slo los datos representados por los campos del registro de salida. Es distinto de un archivo de actualizacin, en el que el registro de salida contiene el registro de entrada modificado por los campos del registro de salida. Un archivo combinado es vlido para un archivo SPECIAL y para un archivo DISK si la posicin 18 contiene una T (un archivo de sustitucin de matriz o tabla).
215
Posicin 19 (Reservada)
Entrada Explicacin Blanco Esta entrada debe estar en blanco.
Consulte la Tabla 29 para saber cul es la relacin entre la posicin 17 y la posicin 20 de las especificaciones de descripcin de archivo y las posiciones 18 a 20 de las especificaciones de salida.
Tabla 29. Funciones de proceso para archivos
Especificacin Descripcin de archivo Funcin Crear un nuevo archivo o Aadir registros a archivo existente Procesar archivo O I A Blanco A Blanco A Blanco Blanco ADD Blanco ADD DEL
1
Posicin 17 O
Posicin 20 Blanco
Procesar archivo y aadir registros I al archivo existente Procesar archivo y actualizar los registros (actualizar o suprimir) Procesar archivo y aadir nuevos registros a un archivo existente Procesar archivo y suprimir registro existente del archivo U U U
: 1En RPG, el trmino crear un nuevo archivo significa aadir registros a un archivo creado recientemente. De este modo, las primeras dos entradas de la tabla realizan la misma funcin. Ambas se listan para mostrar que existen dos modos de especificar dicha funcin.
216
Posicin 21 (Reservada)
Entrada Explicacin Blanco Esta entrada debe estar en blanco.
Una F en la posicin 22 indica que los registros para el archivo estn descritos dentro del programa en las especificaciones de entrada/salida (excepto para los archivos de matrices/tablas). Los archivos PRINTER y SPECIAL deben estar descritos por programa. Los archivos DISK locales deben estar descritos por programa. Una E en la posicin 22 indica que las descripciones de registro para el archivo son externas al programa fuente VisualAge RPG. El compilador obtiene estas descripciones en la compilacin y las incluye en el programa fuente. Los archivos DISK remotos deben estar descritos externamente.
Posicin 28 (Reservada)
Entrada Explicacin Blanco Esta entrada debe estar en blanco.
217
Blanco Los nmeros relativos de registro se utilizan para procesar el archivo. Los registros se leen consecutivamente. K Se utilizan valores de clave para procesar el archivo. Esta entrada slo es vlida para archivos descritos externamente.
Clave
Una entrada K indica que el archivo descrito externamente se procesa presuponiendo que la va de acceso se ha creado sobre valores de clave. Si el proceso es aleatorio, se utilizan los valores de clave para identificar los registros. Si esta posicin est en blanco para un archivo por clave, los registros se recuperan en secuencia de llegada.
Posicin 35 (Reservada)
Entrada Explicacin Blanco Esta entrada debe estar en blanco.
SPECIAL
218
Utilice las posiciones 36 a 42 para especificar el nombre del dispositivo que se asociar con el archivo. El nombre de dispositivo define las funciones que pueden efectuarse con el archivo asociado. Ciertas funciones slo son vlidas para un nombre de dispositivo especfico.
Posicin 43 (Reservada)
La posicin 43 debe estar en blanco.
donde: v Los parmetros van entre parntesis (). Nota: No especifique parntesis si no hay parmetros. v Se utilizan signos de dos puntos (:) para separar varios parmetros. Se han utilizado los convenios de notacin siguientes para mostrar qu parmetros son opcionales y cules son obligatorios: v Las llaves { } indican parmetros opcionales o elementos opcionales de los parmetros. v Unos puntos suspensivos (...) indican que el parmetro puede repetirse. v Un signo de dos puntos (:) establece una separacin entre los parmetros e indica que es posible especificar ms de uno. Todos los parmetros que estn separados por dos puntos son obligatorios a menos que vayan entre llaves. v Una barra vertical (|) indica que slo se puede especificar un parmetro para la palabra clave. v Un espacio en blanco entre los parmetros de la palabra clave indica que se puede especificar ms de uno. Nota: Las llaves, los puntos suspensivos y las barras verticales no son parte de la sintaxis de las palabras clave y no deben figurar en el fuente. Si se requiere espacio adicional para palabras clave, el campo de palabras clave puede continuarse en las lneas subsiguientes. Consulte los apartados Lnea de continuacin de palabras clave de descripcin de archivo en la pgina 213 y Campo de palabras clave de especificacin de descripcin de archivo en la pgina 197. La tabla siguiente resume qu palabras clave son aplicables a los archivos descritos externamente y qu palabras clave son aplicables a los archivos descritos por programa.
Palabra clave BLOCK COMMIT{(rpg_nombre)} Descrito por programa Descrito externamente S S
219
Palabra clave DATFMT(formato{separador}) EXTFILE(nombarch) FORMLEN(nmero) IGNORE(formatoreg{:formatoreg...}) INCLUDE(formatoreg{:formatoreg...}) INFDS(nomESD) INFSR(nomSUBRU) PLIST(nombre_lista_parmetros) PREFIX(nombre_prefijo) PROCNAME(nombre_procedimiento) PRTCTL(estruct_datos{:*COMPAT}) RCDLEN(nombrecampo) RECNO(nombrecampo) REMOTE RENAME(formato_ext:formato_int) TIMFMT(formato{separador}) USROPN
Descrito externamente S
S S S S S S S S S S S S S S S S S S S S
BLOCK(*YES|*NO)
La palabra clave BLOCK controla la agrupacin en bloques de los registros asociados al archivo. La palabra clave nicamente es vlida para archivos DISK. Si no especifica esta palabra clave, el compilador VARPG deshace los bloques de registros de entrada y agrupa los registros de salida por bloques con el fin de mejorar el rendimiento de los archivos DISK si se cumplen las condiciones siguientes: 1. El archivo est descrito externamente y slo tiene un formato de registro. 2. La palabra clave RECNO no se utiliza en la especificacin de descripcin de archivo. 3. Una de las siguientes es verdadera: a. Se trata de un archivo de salida. b. Si se trata de un archivo combinado, es un archivo de matrices o de tablas. c. Se trata de un archivo de slo entrada y en l no se utiliza ninguna de las operaciones siguientes: READE, READPE, SETGT, SETLL y CHAIN. (Si se utiliza alguna operacin READE o READPE, los registros del archivo de entrada no se agruparn por bloques. Si se utiliza alguna operacin SETGT, SETLL o CHAIN ocurrir lo mismo a menos que se especifique la palabra clave BLOCK(*YES) para el archivo de entrada). Si especifica BLOCK(*YES), se producir la agrupacin por bloques de los registros tal y como se ha indicado anteriormente, con la excepcin de que se pueden utilizar operaciones READE, READPE, SETGT, SETLL y CHAIN con un archivo de entrada y la agrupacin por bloques tendr igualmente lugar (vase la condicin 3c anterior). Para evitar que se agrupen los registros por bloques, puede especificarse BLOCK(*NO). El compilador no agrupar los registros por bloques.
220
COMMIT{(rpg_nombre)}
La palabra clave COMMIT permite la opcin de procesar archivos remotos bajo control de compromiso. Puede especificarse un parmetro opcional, nombre_rpg. El parmetro se define implcitamente como un campo de tipo indicador (es decir, campo de caracteres con una longitud de uno) y se inicializa en 0. Especificando el parmetro opcional, el programador puede controlar si se habilita el control de compromiso en tiempo de ejecucin. Si el parmetro contiene un 1, se abre el archivo con COMMIT activado; de lo contrario se abre el archivo sin COMMIT. El parmetro debe establecerse antes de abrir el archivo. Si se abre el archivo durante la inicializacin del programa, puede pasarse el parmetro a travs de otro parmetro. Si el archivo se abre explcitamente, utilizando la operacin OPEN de las especificaciones de clculo, puede establecerse con anterioridad a la operacin OPEN. Utilice los cdigos de operacin COMMIT y ROLBK para agrupar los cambios para este y otros archivos que estn actualmente bajo control de compromiso de modo que los cambios se produzcan todos juntos o que no se produzca ninguno. Nota: Si el archivo ya est abierto con una va de acceso de datos abierta compartida, el valor de control de compromiso debe coincidir con el valor de la operacin OPEN anterior.
DATFMT(formato{separador})
La palabra clave DATFMT permite especificar un formato de fecha externo por omisin y un separador por omisin (que es opcional) para todos los campos de fecha del archivo descrito por el programa. Si el archivo, para el que se ha especificado la palabra clave, es un archivo indexado y el campo de clave es una fecha, tambin se proporciona el formato por omisin para el campo de clave. El archivo puede ser remoto o local. Puede especificar un formato externo diferente para campos de fecha de entrada o de salida individuales en el archivo especificando un formato/separador de fecha para el campo en la especificacin de entrada (posiciones de la 31 a la 35) o en la especificacin de salida (posiciones de la 53 a la 57) correspondientes. Para los campos de entrada de fecha, especifica el formato/separador de la fecha externa por omisin (las posiciones de especificacin de entrada 31-35). Para los campos de salida de fecha, especifica el formato/separador de fecha externa por omisin (las posiciones de especificacin de salida 53-57). Consulte DATFMT(fmt{separador}) en la pgina 205 para obtener ms informacin sobre formatos y separadores de fecha. Para obtener ms informacin acerca de los formatos externos, vea Formatos internos y externos en la pgina 95.
EXTFILE(nombrearchivo)
La palabra clave EXTFILE le permite especificar un nombre de archivo real en la ejecucin en lugar de facilitarlo en la compilacin. El archivo debe ser un archivo DISK o PRINTER local. Con la palabra clave EXTFILE tambin se debe especificar la palabra clave USROPN.
221
FORMLEN(nmero)
La palabra clave FORMLEN sirve para especificar la longitud de formulario de un archivo PRINTER. La longitud de formulario debe ser mayor o igual a 1 y menor o igual a 255. El parmetro especifica el nmero exacto de lneas disponible en el formulario o pgina que se utilizar. Cuando el nmero de lneas coincide con FORMLEN, se inserta la alimentacin automtica de formulario.
IGNORE(formatoreg{:formatoreg...})
La palabra clave IGNORE permite no tener en cuenta un formato de registro de un archivo descrito externamente. El nombre externo del formato de registro que se ha de ignorar se especifica en el parmetro formatoreg. Se pueden especificar varios formatos de registro, separados mediante dos puntos (:). El programa se ejecuta como si el(los) formato(s) de registro especificado(s) no existieran. Todos los dems formatos de registro contenidos en el archivo se incluirn. Cuando se especifica la palabra clave IGNORE para un archivo, no se puede especificar la palabra clave INCLUDE.
INCLUDE(formatoreg{:formatoreg...})
La palabra clave INCLUDE especifica los nombres de formato de registro que se van a incluir. Todos los dems formatos de registro contenidos en el archivo se ignorarn. Se pueden especificar varios formatos de registro, separados mediante dos puntos (:). Cuando se especifica la palabra clave INCLUDE para un archivo, no se puede especificar la palabra clave IGNORE.
INFDS(nombreDS)
La palabra clave INFDS le permite definir y dar nombre a una estructura de datos que contendr la informacin de retorno asociada al archivo. El nombre de la estructura de datos se especifica como el parmetro de INFDS. Si se especifica INFDS para ms de un archivo, cada estructura de datos asociada debe tener un nombre exclusivo. Una INFDS nicamente se puede definir en la seccin fuente principal.
INFSR(nombreSUBR)
La subrutina de errores de excepcin de archivo especificada como el parmetro para esta palabra clave puede recibir el control despus de los errores de excepcin de archivo. El nombre de la subrutina puede ser *PSSR, que indica que la subrutina de excepciones/errores del programa definido por el usuario controlar los errores de este archivo. La palabra clave INFSR no se puede especificar si un subprocedimiento ha de acceder al archivo.
PLIST(nombre_Plist)
PLIST suministra, como su parmetro, el nombre de la lista de parmetros que se ha de pasar al programa para el archivo SPECIAL. El procedimiento se especifica utilizando la palabra clave PROCNAME(nombre_procedimiento). Esta entrada slo es vlida cuando el dispositivo especificado en la lnea de descripcin de archivo (posiciones 36 a 42) es SPECIAL. Los parmetros que identifica esta entrada se aaden al final de la lista de parmetros que pasa el programa.
222
PREFIX(serie_prefijo{:nm_de_car_sustit})
La palabra clave PREFIX se utiliza para redenominar parcialmente los campos de un archivo descrito externamente. Los caracteres especificados como serie_prefijo se aaden como prefijo a los nombres de todos los campos definidos en todos los registros de archivo especificado en las posiciones de la 7 a la 16. Adems, opcionalmente puede especificar un valor numrico para indicar el nmero de caracteres, si existe alguno, a sustituir del nombre existente. Si no se especifica nm_de_car_sustit, la serie se une al principio del nombre. Si se especifica nm_de_car_sustit, debe ser una constante numrica que contenga un valor entre 0 y 9 sin posiciones decimales. Por ejemplo, la especificacin PREFIX(YE:3) cambiara el nombre de campo YTDTOTAL por YETOTAL. Especificar un valor de cero es equivalente a no especificar nm_de_car_sustit en absoluto. Normas: v Se puede redenominar un campo de modo explcito en una especificacin de entrada, incluso si se ha especificado la palabra clave PREFIX para un archivo. El compilador reconocer (y requerir) el nombre que se UTILIZA primero en el programa. Por ejemplo, si especifica que el nombre con prefijo de una especificacin de entrada se asocie al campo con un indicador y, a continuacin, intenta redenominar el campo que hace referencia al nombre sin prefijo, obtendr un error. Por el contrario, si primero redenomina el campo para que no sea un nombre con prefijo y, a continuacin, utiliza el nombre con prefijo en una especificacin, obtendr un error en el tiempo de compilacin. v La longitud total del nombre una vez aplicado el prefijo no debe exceder la longitud mxima de un nombre de campo VisualAge RPG. v El nmero de caracteres del nombre al que se aadir el prefijo no debe ser inferior o igual al valor que representa el parmetro nm_de_car_sustit. Es decir, despus de aplicar el prefijo, el nombre resultante no debe ser igual a la serie del prefijo.
PROCNAME(nombre_procedimiento)
Cuando la entrada de dispositivo es SPECIAL (posiciones 36 a 47), el mdulo del cdigo suministrado por usuario especificado como el parmetro en PROCNAME maneja el soporte del dispositivo de E/S especial. Consulte Posiciones 36-42 (Dispositivo) en la pgina 218 y PLIST(nombre_Plist) en la pgina 222 para obtener ms informacin.
PRTCTL(estruct_datos{:*COMPAT})
La palabra clave PRTCTL especifica la utilizacin del control dinmico de impresora. La estructura de datos especificada como el parmetro estructura_datos hace referencia a la informacin de control de formularios y al valor total de lneas. La palabra clave PRTCTL slo es vlida para un archivo descrito por programa. El parmetro opcional *COMPAT indica que la disposicin de estructura de datos es compatible con RPG III. Si no se especifica *COMPAT, debe utilizarse la estructura de datos de longitud ampliada.
223
Contenido de subcampo
Un campo de caracteres de 3 posiciones que contiene el valor de espacio antes (blanco 0-255) Un campo de caracteres de 3 posiciones que contiene el valor de espacio posterior (blanco 0-255) Un campo de caracteres de 3 posiciones que contiene el valor de saltar antes (entradas vlidas: blanco 1-255) Un campo de caracteres de 3 posiciones que contiene el valor de saltar despus (blanco 1-255) Un campo numrico de tres dgitos (decimal con zona) con cero posiciones decimales que contiene el valor total de lneas actual.
Un campo de caracteres de una posicin que contiene el valor de espacio antes (blanco 0-3) Un campo de caracteres de una posicin que contiene el valor de espacio antes (entradas vlidas: blanco 0-3) Un campo de caracteres de dos posiciones que contiene el valor de saltar antes (blanco, 1-99, A0-A9 para 100-109, B0-B2 para 110-112) Un campo de caracteres de dos posiciones que contiene el valor de saltar despus (blanco, 1-99, A0-A9 para 100-109, B0-B2 para 110-112) Un campo numrico de tres dgitos (decimal con zona) con cero posiciones decimales que contiene el valor total de lneas actual.
Los valores de los primeros cuatro subcampos de la estructura de datos de longitud ampliada son iguales a los permitidos en las posiciones 40 a 51 (entradas de espacio y saltar) de las especificaciones de salida. Si las entradas de espacio y saltar (posiciones 40 a 51) de las especificaciones de salida estn en blanco y si los subcampos 1 a 4 tambin estn en blanco, el valor por omisin es 1 espacio despus. Si se especifica la opcin PRTCTL, slo se utiliza para los registros de salida que tienen blancos en las posiciones 40 a 51. Puede controlar el valor de espacio y saltar (subcampos 1 a 4) para el archivo PRINTER cambiando los valores de estos subcampos mientras se est ejecutando el programa. El subcampo 5 contiene el valor total de lneas actual. El compilador VisualAge RPG no inicializa el subcampo 5 hasta que se imprime la primera lnea de salida. A continuacin el compilador VisualAge RPG cambia el subcampo 5 despus de cada operacin de salida en el archivo.
RCDLEN(nombre de campo)
La palabra clave RCDLEN se puede utilizar para los archivos DISK locales. El parmetro de nombre de campo debe ser numrico con cero posiciones decimales. En los archivos de entrada, el nombre de campo contiene la longitud del registro que se ha ledo. En los archivos de salida, el nombre del campo especifica la longitud del registro que se ha de grabar. La longitud de registro especificada en las posiciones 23 - 27 define la longitud mxima de campo. RCDLEN debe ser menor o igual que esta longitud de registro. La longitud de registro ms pequea que puede grabarse es cero. Si el valor especificado con RECLEN es inferior a cero, se efecta un redondeo por exceso a cero.
224
Si la palabra clave RCDLEN est incluida, el archivo se trata como si contuviera registros de longitud variable. Si la palabra clave no est incluida, el archivo se trata como si contuviera registros de longitud fija. Nota: Si el campo RCDLEN se establece en la salida, prevalece sobre la longitud de cualquier estructura de datos que se utilice.
RECNO(nombre de campo)
Esta palabra clave es opcional para los archivos DISK que se han de procesar por nmero de registro relativo. Debe especificarse la palabra clave RECNO para los archivos de salida procesados por nmero relativo de registro, para archivos de salida a los que se hace referencia mediante una operacin de clculo WRITE aleatoria, o para los archivos de salida que se utilizan con ADD en las especificaciones de salida. Nota: Si no se especifica la palabra clave RECNO, se produce la agrupacin en bloques. Puede especificarse la palabra clave RECNO para los archivos de entrada/actualizacin. El nmero relativo del registro que se recupera se coloca en nombrecampo, para todas las operaciones que reposicionan el archivo (como por ejemplo READ, SETLL u OPEN). Debe definirse como numrico con cero posiciones decimales. La longitud de campo debe ser suficiente para contener el nmero de registro ms largo del archivo. Cuando se especifica la palabra clave RECNO para archivos de entrada o actualizacin con adicin en archivo (A en la posicin 20), el valor del parmetro nombrecampo debe hacer referencia a un nmero relativo de registro de un registro suprimido, para que la operacin de salida sea satisfactoria. Nota: Se ignora la palabra clave RECNO si se graba (WRITE) en un archivo local.
REMOTE
La palabra clave REMOTE especifica que el dispositivo de disco reside en un servidor AS/400.
RENAME(formato_externo:formato_interno)
La palabra clave RENAME le permite redenominar formatos de registros en un archivo descrito externamente. El nombre externo del formato de registro que se ha de redenominar se entra como el parmetro formato_externo. El parmetro formato_interno es el nombre del registro como se utiliza en el programa. El nombre externo se sustituye por este nombre en el programa. Para redenominar todos los campos aadiendo un prefijo, utilice la palabra clave PREFIX.
TIMFMT(formato{separador})
La palabra clave TIMFMT permite especificar un formato de hora externo por omisin y un separador por omisin (que es opcional) para todos los campos de hora de los campos descritos por el programa. Si el archivo en el que se ha especificado esta palabra clave es un archivo indexado y el campo de clave es una hora, el formato de hora especificado tambin proporciona el formato por omisin para el campo de clave. El archivo puede ser local o remoto.
225
Puede especificar un formato externo diferente para campos de hora de entrada o de salida individuales en el archivo especificando un formato/separador de hora para el campo en la especificacin de entrada (posiciones de la 31 a la 35) o en la especificacin de salida (posiciones de la 53 a la 57) correspondientes. Consulte la Tabla 20 en la pgina 127 para obtener informacin sobre formatos y separadores vlidos. Para obtener ms informacin acerca de los formatos externos, vea Formatos internos y externos en la pgina 95.
USROPN
La palabra clave USROPN hace que el archivo no se abra durante la inicializacin del programa. Esto da control al programador sobre la primera apertura del archivo. El archivo debe abrirse explcitamente utilizando la operacin OPEN en las especificaciones de clculo. Esta palabra clave no es vlida para archivos de entrada designados como archivos de tabla. Es necesaria la palabra clave USROPN para que el programador tenga control sobre la primera apertura del archivo. Por ejemplo, si se abre un archivo y se cierra posteriormente mediante una operacin CLOSE, puede volver a abrirse el archivo (utilizando la operacin OPEN) sin haber especificado la palabra clave USROPN en la especificacin de descripcin de archivo.
Secuencial
Clave
Blanco
Blanco
Secuencial Aleatorio
RRN Clave
Blanco Blanco
Blanco K
Blanco Blanco
226
Las definiciones de estructuras de datos, prototipos e interfaces de procedimiento finalizan con la primera especificacin de definicin sin espacios en blanco en las posiciones 24-25 o con la primera especificacin que no sea de definicin. Las especificaciones de definicin pueden aparecer en dos lugares dentro de un mdulo o programa: en la seccin de fuente principal y en un subprocedimiento. Dentro de la seccin de fuente principal, debe definir todas las definiciones globales. Dentro de un subprocedimiento, debe definir la interfaz de procedimiento y sus parmetros, segn lo requiera el prototipo. Tambin debe definir todos los elementos de datos locales que precise el procedimiento con prototipo cuando se vaya a procesar. Todas las definiciones de un procedimiento con prototipo son locales. No las conocen los dems procedimientos (incluyendo el procedimiento principal). Para obtener ms informacin acerca de la estructura de la seccin de fuente principal y cmo afecta la ubicacin de definiciones al mbito, vea Ubicacin de definiciones y mbito en la pgina 228. En la especificacin de definicin pueden definirse matrices y tablas como un subcampo de estructura de datos o como un campo autnomo. Para obtener informacin adicional acerca de cmo definir y utilizar matrices y tablas, vea el Captulo 12. Utilizacin de matrices y tablas en la pgina 157. En las especificaciones de definicin se pueden especificar funciones incorporadas (BIF) en el campo de palabra clave como un parmetro para una palabra clave. En la especificacin de definicin slo se permite una funcin incorporada si se conocen los valores de todos los argumentos en el momento de la compilacin. Todos los argumentos de una BIF deben definirse antes en las especificaciones al especificarlas como parmetros para las palabras clave de especificacin de definicin DIM, OCCURS, OVERLAY y PERRCD. Para obtener ms informacin
227
acerca de cmo utilizar las funciones incorporadas, consulte el Captulo 23. Funciones incorporadas en la pgina 309. Para obtener ms informacin sobre estructuras de datos, constantes, tipos de datos y formatos de datos, consulte el Captulo 9. Tipos de datos y formatos de datos en la pgina 95, el Captulo 11. Estructuras de datos en la pgina 147, y el Captulo 10. Literales y constantes con nombre en la pgina 139. Para obtener ms informacin acerca de los prototipos, vea Prototipos y parmetros en la pgina 67.
mbito global
228
H F D I C C C O P P P
EXE
H F D I O P P P P P
Por lo general, todos los elementos que se han definido en la seccin de fuente principal son globales y, por consiguiente, conocidos en todo el mdulo. Las definiciones globales son definiciones que pueden utilizar tanto las sentencias del procedimiento principal como cualquier subprocedimiento del mdulo. Por otra parte, los elementos de un subprocedimiento son locales. Las definiciones locales son definiciones que nicamente se conocen en el subprocedimiento. Si un elemento se define con el mismo nombre que un elemento global, todas las referencias respecto a ste desde el subprocedimiento utilizarn la definicin local. Sin embargo, debe tener en cuenta las excepciones siguientes: v Slo el procedimiento para el que se han definido conoce los nombres de las subrutinas y de las etiquetas. Esto incluye los nombres de las subrutinas o de las etiquetas que se han definido en el procedimiento principal. v Todos los campos especificados en las especificaciones de entrada y de salida son globales. Por ejemplo, si un subprocedimiento lleva a cabo una operacin utilizando un formato de registro, como una operacin WRITE, se utilizarn los campos globales, incluso si existen definiciones locales con los mismos nombres
Captulo 18. Especificaciones de definicin
229
que los campos de formato de registro. La regla tambin se aplica a la LECTURA y la ESCRITURA de ventanas. Algunas veces puede haber una combinacin de definiciones globales y locales. Por ejemplo, las KLIST y las PLIST pueden ser globales o locales. Los campos asociados a las KLIST y PLIST globales nicamente contienen campos globales. Los campos asociados a las KLIST y PLIST locales pueden contener campos globales y locales. Si desea obtner ms informacin sobre el comportamiento de los subprocedimientos internos KLIST y KFLD, consulte el apartado mbito de definiciones en la pgina 62.
Almacenamiento de definiciones
Las definiciones locales utilizan almacenamiento automtico. El almacenamiento automtico es un tipo de almacenamiento que nicamente existe durante la llamada del procedimiento. Las variables del almacenamiento automtico no guardan sus valores entre las llamadas. Por otra parte, las definiciones globales utilizan almacenamiento esttico. El almacenamiento esttico es un tipo de almacenamiento que tiene una ubicacin constante en la memoria para todas las llamadas de un programa o procedimiento. Conserva su valor a travs de las llamadas. Especifique la palabra clave STATIC para indicar que una definicin de campo local utilice almacenamiento esttico, en cuyo caso, conservar su valor en cada llamada al procedimiento. Si se especifica la palabra clave STATIC, el elemento se inicializar en el tiempo de inicializacin del mdulo. La utilizacin del almacenamiento automtico reduce el almacenamiento que necesita el programa en el tiempo de ejecucin. El almacenamiento se reduce en gran parte debido a que el almacenamiento automtico slo se asigna mientras se ejecuta el procedimiento. Por otra parte, al arrancar el programa se asigna todo el almacenamiento esttico asociado a ste, incluso si no se llama a ningn procedimiento que utilice el almacenamiento esttico.
230
v Las posiciones 7 a 43 de la lnea de continuacin deben estar en blanco v La especificacin contina a partir de la posicin 44
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 D.....................................Keywords+++++++++++++++++++++++++++++Comments++++++++++++
Figura 83. Diseo de la lnea de continuacin de las palabras clave de especificacin de definicin
231
Utilice las posiciones 7-21 para especificar el nombre del elemento de datos que se va a definir. El nombre puede comenzar en cualquier posicin del espacio proporcionado. Se puede utilizar el sangrado para indicar la forma de los datos en las estructuras de datos. Para las lneas de nombres continuados, se especifica un nombre en las posiciones 7 a 80 de las lneas de nombres continuados y en las posiciones 7 a 21 de la lnea de definicin principal. Como en el caso de las definiciones tradicionales de nombres, no tiene importancia si los caracteres estn en maysculas o en minsculas. Para un subcampo descrito externamente, un nombre especificado aqu sustituye al nombre de subcampo externo especificado en la palabra clave EXTFLD. Para una definicin de parmetro con prototipo, la entrada de nombre es opcional. Si se especifica un nombre, ste se ignora. (Un parmetro con prototipo es una especificacin de definicin con espacios en blanco en las posiciones 24-25 situado a continuacin de una especificacin PR o de otra definicin de parmetro con prototipo.) Si est definiendo un prototipo y, el nombre especificado en las posiciones 7-21 no sirve como nombre externo del procedimiento, utilice la palabra clave EXTPROC para especificar el nombre externo vlido. Por ejemplo, quiz sea necesario que el nombre externo est en minsculas, puesto que se est definiendo un prototipo para un procedimiento escrito en C.
Blanco
Blanco
232
PI PR
S (columna 24)
Las definiciones de estructuras de datos, prototipos e interfaces de procedimiento finalizan con la primera especificacin de definicin sin espacios en blanco en las posiciones 24-25 o con la primera especificacin que no sea de definicin.
Captulo 18. Especificaciones de definicin
233
Puede que las especificaciones de definicin de campos autnomos y constantes con nombre no se incluyan en las especificaciones de definicin para una estructura de datos y sus subcampos. Para consultar una lista de palabras clave vlidas, agrupadas segn el tipo de definicin, vea Resumen segn el tipo de especificacin de definicin en la pgina 262.
234
v Si el campo Desde (posicin 26-32) contiene un valor numrico, entonces un valor numrico en este campo especifica la posicin final absoluta del subcampo en una estructura de datos. v Si el campo Desde est en blanco, un valor numrico en este campo especifica: La longitud de toda la estructura de datos o La longitud del campo autnomo o La longitud del parmetro o La longitud del subcampo. En la estructura de datos, este subcampo se posiciona de tal modo que su posicin inicial es mayor que el valor mximo de a posicin de todos los subcampos definidos en la estructura de datos. Se inserta el relleno si el subcampo se define con el puntero de tipo base o con el puntero de procedimiento para asegurarse de que el subcampo est alineado adecuadamente. Nota: En los campos de tipo grfico o UCS-2, el nmero que aqu se especifica es el nmero de caracteres grficos o UCS-2, NO el nmero de bytes (1 carcter grfico o UCS-2 = 2 bytes). En los campos numricos, el nmero que aqu se especifica es el nmero de dgitos (para campos numricos empaquetados y con zona : 1-30; para campos numricos binarios : 1-9; para campos numricos enteros y sin signo: 3, 5, 10 o 20). +|-nnnnn Esta entrada es vlida para campos autnomos o subcampos definidos utilizando la palabra clave LIKE. La longitud del campo autnomo o subcampo que se est definiendo en esta especificacin de lnea se determina sumando o restando el valor entrado en estas posiciones a la longitud del campo especificado como el parmetro de la palabra clave LIKE. Nota: En los campos de tipo grfico o UCS-2, el nmero que aqu se especifica es el nmero de caracteres grficos o UCS-2, NO el nmero de bytes (1 carcter grfico o UCS-2 = 2 bytes). En los campos numricos, el nmero especificado aqu es el nmero de dgitos. Palabras reservadas Si se utilizan las posiciones 26-32 para entrar palabras especiales reservadas, este campo se convierte en una extensin de la anterior, creando un campo de gran tamao (posiciones 26-39), con lo que en este campo se permite que se amplen palabras reservadas cuyos nombres tengan una longitud superior a 7 caracteres. Consulte el apartado Posiciones 26-32 (Desde posicin) en la pgina 234.
235
Blanco Si no se especifica la palabra clave LIKE: el elemento est definindose como carcter si las posiciones decimales estn en blanco. Si la entrada de posiciones decimales no est en blanco, el elemento est definindose como numrico empaquetado si es un campo autnomo o como numrico con zona si es un subcampo. Nota: La entrada debe estar en blanco cuando se especifica la palabra clave LIKE. A N C G T D Z P B I S U F O * Carcter (formato de longitud variable o fija) Carcter (formato indicador) UCS-2 (formato de longitud fija o variable) Grfico (formato de longitud variable o fija) Hora Fecha Indicacin de la hora Numrico (Formato decimal empaquetado) Numrico (Formato binario) Numrico (Formato de entero) Numrico (Formato con zona) Numrico (Formato sin signo) Numrico (formato flotante) Objeto (slo para aplicaciones Java) Puntero de base o puntero de procedimiento
Esta entrada slo suministrarse en combinacin con el campo A/longitud. Si el campo A/longitud est en blanco, el valor de esta entrada se define en otro lugar del programa (por ejemplo, a travs de un archivo de base de datos descrito externamente).
Posicin 43 (Reservada)
La posicin 43 debe estar en blanco.
236
donde: v Los parmetros van entre parntesis (). Nota: No especifique parntesis si no hay parmetros. v Se utilizan signos de dos puntos (:) para separar varios parmetros. Se han utilizado los convenios de notacin siguientes para mostrar qu parmetros son opcionales y cules son obligatorios: v Las llaves { } indican parmetros opcionales o elementos opcionales de los parmetros. v Unos puntos suspensivos (...) indican que el parmetro puede repetirse. v Un signo de dos puntos (:) establece una separacin entre los parmetros e indica que es posible especificar ms de uno. Todos los parmetros que estn separados por dos puntos son obligatorios a menos que vayan entre llaves. v Una barra vertical (|) indica que slo se puede especificar un parmetro para la palabra clave. v Un espacio en blanco entre los parmetros de la palabra clave indica que se puede especificar ms de uno. Nota: Las llaves, los puntos suspensivos y las barras verticales no son parte de la sintaxis de las palabras clave y no deben figurar en el fuente. Si se requiere espacio adicional para palabras clave, el campo de palabras clave puede continuarse en las lneas subsiguientes. Consulte los apartados Lnea de continuacin de palabras clave de especificacin de definicin en la pgina 230 y Campo de palabras clave de especificacin de definicin en la pgina 198.
ALIGN
La palabra clave ALIGN se utiliza para alinear subcampos flotantes, enteros y sin signo. Al especificar ALIGN, los subcampos de 2 bytes se alinean en un lmite de 2 bytes, los subcampos de 4 bytes se alinean en un lmite de 4 bytes y los subcampos de 8 bytes se alinean en un lmite de 8 bytes. Quiz sea necesaria la alineacin para mejorar el rendimiento al acceder a subcampos flotantes, enteros y sin signo. Especifique ALIGN en la definicin de la estructura de datos, pero no puede especificar ALIGN para la estructura de datos de informacin de archivo (INFDS), ni para la estructura de datos del estado del programa (PSDS).
237
La alineacin nicamente se lleva a cabo para los subcampos de estructura de datos definidos con notacin de longitud y sin la palabra clave OVERLAY. Si los campos que se estn definiendo con notacin absoluta o utilizando la palabra clave OVERLAY no estn alineados correctamente, se emite un mensaje de diagnstico. Los subcampos de puntero siempre se alinean en un lmite de 4 bytes, se especifique o no ALIGN. Consulte el apartado Alineacin de los subcampos de la estructura de datos en la pgina 148 si desea ms informacin.
ALT(nombre_matriz)
La palabra clave ALT indica que la matriz de tiempo de compilacin, o la matriz de tiempo de pre-ejecucin o la tabla tiene un formato alternativo. La matriz definida con la palabra clave ALT es la matriz alternativa y el nombre de matriz especificado como el parmetro es la matriz principal. La definicin de matriz alternativa debe preceder o seguir la definicin de matriz principal. Las palabras clave de la matriz principal definen la carga de ambas matrices. Los datos de inicializacin estn en orden alternativo, comenzando por la matriz principal, del modo siguiente: principal/alt/principal/alt/... En la definicin de matriz alternativa no son vlidas las palabras clave PERRCD, FROMFILE, TOFILE y CTDATA.
ASCEND
La palabra clave ASCEND describe la secuencia de los datos de una matriz o tabla cargada durante el tiempo de preejecucin o durante el tiempo de compilacin. Consulte el apartado DESCEND en la pgina 241. La secuencia ascendente significa que las entradas de matriz o tabla deben comenzar con la entrada de datos inferior (segn la clasificacin ASCII por omisin) y seguir hasta la mayor. Se permiten los elementos de igual valor. Al cargar datos en la matriz o tabla se comprueba la secuencia especificada de una matriz o tabla de tiempo de preejecucin. Si la matriz o tabla no est en secuencia, se pasa el control a la rutina de manejo de excepciones/errores. No se comprueba la secuencia en una matriz de tiempo de ejecucin (cargada mediante entrada y/o especificaciones de clculo). Si se utiliza la operacin LOOKUP para buscar una entrada en una matriz o tabla, debe especificarse una secuencia (ascendente o descendente) para determinar si la entrada es superior o inferior comparada con el argumento de bsqueda. Si se utiliza el cdigo de operacin SORTA con una matriz y no se especifica una secuencia, se presupone la secuencia ascendente.
BASED(nombre_puntero_de base)
Cuando se especifica la palabra clave BASED para una estructura de datos o un campo autnomo, se crea un puntero de base utilizando el nombre especificado como el parmetro de palabra clave. Este puntero de base contiene la direccin (ubicacin de almacenamiento) de la estructura de datos o campo autnomo que se
238
est definiendo. En otras palabras, el nombre especificado en las posiciones 7-21 se utiliza para hacer referencia a los datos almacenados en la ubicacin contenida en el puntero de base. Nota: Antes de que pueda utilizarse la estructura de base de datos o el campo autnomo, debe asignarse una direccin vlida al puntero de base. Una matriz definida como campo autnomo basado debe ser una matriz de tiempo de ejecucin. Si se define un campo basado dentro de un subprocedimiento, tanto el campo como el puntero basado con locales.
BUTTON(botn1:botn2....)
La palabra clave BUTTON define los pulsadores de la ventana de mensaje que se especifiquen en el factor 2 del cdigo de operacin DSPLY. Puede especificar un mximo de 3 parmetros de pulsador por palabra clave. Las combinaciones vlidas de botones son las siguientes:
*OK *YESBUTTON: *NOBUTTON *OK: *CANCEL *RETRY: *ABORT: *IGNORE *RETRY: *CANCEL *YESBUTTON: *NOBUTTON: *CANCEL
Esta palabra clave no se puede utilizar si se usan las palabras clave MSGDATA, MSGNBR o MSGTEXT.
CCSID(nmero | *DFT)
Esta palabra clave establece el CCSID para las definiciones de tipos grfico y UCS-2. nmero debe ser un entero entre 0 y 65535. Debe ser un valor de CCSID grfico o UCS-2 vlido. Los CCSID UCS-2 vlidos son 13488 y 17584. En los campos descritos por el programa, CCSID(nmero) altera temporalmente los valores por omisin establecidos con la palabra clave CCSID(*GRAPH: *SRC), CCSID(*GRAPH: nmero) o CCSID(*UCS2: nmero) en la especificacin de control. CCSID(*DFT) indica que debe utilizarse el CCSID por omisin del mdulo. Esta opcin resulta de utilidad cuando se utiliza la palabra clave LIKE, ya que, de lo contrario, el nuevo campo heredara el CCSID del campo fuente. Si no se especifica esta palabra clave, se asume el CCSID grfico o UCS-2 por omisin del mdulo. (No se permite esta palabra clave en los campos grficos cuando se especifica o se asume CCSID(*GRAPH : *IGNORE)). Si no se especifica esta palabra clave y se especifica la palabra clave LIKE, el nuevo campo tendr el mismo CCSID que el del campo LIKE.
CLASS(*JAVA:nombre_clase)
Restriccin: Una palabra clave de slo Java
239
Para declarar campos que puedan almacenar objetos, especifique O en la columna 40 de la especificacin D y utilice la palabra clave CLASS para proporcionar la clase del objeto. La palabra clave CLASS necesita dos parmetros:
CLASS(*JAVA:nombre_clase)
*JAVA identifica el objeto como objeto Java. nombre_clase especifica la clase del objeto. El nombre de clase debe ser un literal de tipo carcter y con l la clase Java debe quedar totalmente calificada. El nombre de clase es sensible a las maysculas y minsculas. Los campos de tipo O no pueden definirse como subcampos de estructuras de datos. Es posible disponer de matrices de campos de tipo O, pero no estn permitidas las tablas de tipo O porque stas deben precargarse en tiempo de ejecucin. Las palabras clave siguientes no pueden utilizarse con la palabra clave CLASS:
ALIGN, ALT, ASCEND, BASED, BUTTON, CLTPGM, CONST, CTDATA, DATFMT, DESCEND, DTAARA, EXTFLD, EXTFMT, EXTNAME, FROMFILE, INZ, LINKAGE, MSGDATA, MSGNBR, MSGTEXT, MSGTITLE, NOOPT, NOWAIT, OCCURS, OPTIONS, OVERLAY, PACKEVEN, PERRCD, PREFIX, PROCPTR, STYLE, TIMFMT, TOFILE, VALUE, VARYING
Si desea obtener ms informacin sobre las llamadas a mtodos Java, as como ejemplos, consulte la publicacin Programacin con VisualAge para RPG.
CLTPGM(nombre de programa)
Se utiliza la palabra clave CLTPGM para especificar el nombre del programa local al que llama el programa VisualAge RPG, utilizando la operacin CALLP. El programa local al que se llama puede ser un archivo EXE, PIF, COM o BAT. La extensin por omisin es EXE. Nota: Para cada parmetro se debe codificar una especificacin de definicin.
CONST(constante)
Se utiliza la palabra clave CONST para especificar el valor de una constante con nombre. Esta palabra clave es opcional (puede especificarse el valor de la constante con o sin la palabra clave CONST) y slo es vlida para definiciones de constantes con nombre (C en la posicin 24). El parmetro debe ser un literal, una constante figurativa o una funcin incorporada. Puede continuarse la constante en las lneas subsiguientes siguiendo las reglas de continuacin adecuadas. Consulte el apartado Reglas de continuacin en la pgina 195. Si se utiliza una constante con nombre como un parmetro para las palabras clave DIM, OCCURS, PERRCD o OVERLAY, antes de utilizarla se debe definir la constante con nombre. Cuando se especifica un parmetro de referencia de slo lectura, se especifica la palabra clave CONST en la especificacin de definicin de la definicin de parmetro de la interfaz del procedimiento y del prototipo. No se permite ningn parmetro para la palabra clave.
240
Cuando se especifica la palabra clave CONST, el compilador puede copiar el parmetro en uno temporal y pasar la direccin de este ltimo. Algunas condiciones que podran causar esto son: el parmetro pasado es una expresin o el parmetro pasado tiene un formato diferente. No utilice esta palabra clave como una definicin de prototipo a menos que est seguro de que el programa o procedimiento no cambiarn el parmetro. Si el procedimiento o programa llamado se compilan utilizando una interfaz de procedimiento con el mismo prototipo, el usuario no deber preocuparse, puesto que el compilador se encarga de comprobarlo. Pasar un parmetro por valor de constante ofrece las mismas ventajas que pasarlo por valor. En particular, le permite pasar literales y expresiones.
CTDATA
La palabra clave CTDATA indica que la matriz o tabla se carga utilizando los datos de tiempo de compilacin. Los datos se especifican al final del programa despus de la especificacin ** o **CTDATA(nombre matriz/tabla). Cuando se carga una matriz o tabla en tiempo de compilacin, se compila junto con el programa fuente y se incluye en el programa. No es necesario cargar independientemente dicha matriz o tabla cada vez que se ejecuta el programa.
DATFMT(formato{separador})
La palabra clave DATFMT especifica el formato de fecha interno para un campo de Fecha y opcionalmente el carcter separador. Esta palabra clave se genera automticamente para un subcampo de estructura de datos descrita externamente de tipo Fecha y se determina en tiempo de compilacin. Esta palabra clave se puede utilizar al definir parmetros CALLP. Consulte el apartado DATFMT(fmt{separador}) en la pgina 205. La jerarqua utilizada al determinar el formato interno y el separador para una matriz o campo de fecha proviene de: 1. La palabra clave DATFMT especificada en la especificacin de definicin 2. La palabra clave DATFMT indicada en la especificacin de control 3. *ISO
DESCEND
La palabra clave DESCEND describe la secuencia de los datos en una matriz o tabla cargada durante el tiempo de preejecucin o durante el tiempo de compilacin. Consulte el apartado ASCEND en la pgina 238. La secuencia descendente significa que las entradas de matriz o tabla deben comenzar por la entrada de datos superior (segn la secuencia de clasificacin) y continuar hasta la inferior. Se permiten los elementos de igual valor. Al cargar datos en la matriz o tabla se comprueba la secuencia especificada de una matriz o tabla de tiempo de preejecucin. Si la matriz o tabla no est en secuencia, se pasa el control a la rutina de manejo de excepciones/errores. No se comprueba la secuencia en una matriz de tiempo de ejecucin (cargada mediante entrada y/o especificaciones de clculo).
Captulo 18. Especificaciones de definicin
241
Si se utiliza la operacin LOOKUP para buscar una entrada en una matriz o tabla, debe especificarse una secuencia (ascendente o descendente) para determinar si la entrada es superior o inferior comparada con el argumento de bsqueda. Si se utiliza el cdigo de operacin SORTA con una matriz y no se especifica una secuencia, se presupone la secuencia ascendente.
DIM(constante_numrica)
La palabra clave DIM define el nmero de elementos de una matriz o tabla. La constante numrica debe tener cero (0) posiciones decimales. Puede ser un literal, una constante con nombre o una funcin incorporada. El valor de constante debe conocerse en el momento de procesar la palabra clave o de lo contrario se producir un error de tiempo de compilacin. Esta palabra clave se puede utilizar al definir parmetros CALLP.
DLL(nombre)
La palabra clave DLL, junto con la palabra clave LINKAGE, se utiliza para crear el prototipo de un procedimiento que llama a funciones contenidas en bibliotecas DLL de Windows, incluyendo las API de Windows. El siguiente ejemplo muestra cmo codificar el prototipo y llamar a la funcin GetCurrentDirectory de la API de Windows:
D GetCurDir D D D D D CurDir D CurDirSiz D RCLong C PR 10I 0 ExtProc('GetCurrentDirectoryA') DLL('KERNEL32.DLL') Linkage(*StdCall) 10I 0 Value 255A 255A 10I 0 Inz(%Size(CurDir)) 10I 0 Eval RCLong = GetCurDir(CurDirSiz:CurDir)
S S S
La A del nombre de procedimiento externo (GetCurrentDirectoryA) indica que se va a llamar la versin de un solo byte de la DLL. Para llamar a la versin Unicode, especifique una W.
DTAARA{(nombre_rea_datos)}
La palabra clave DTAARA se utiliza para asociar un campo autnomo, estructura de datos, subcampo de estructura de datos o estructura de datos del rea de datos con un rea de datos externa. La palabra clave DTAARA tiene la misma funcin que el cdigo de operacin *DTAARA DEFINE. Consulte el apartado Definicin de un campo como un rea de datos en la pgina 429. Si no se especifica nombre_rea_datos, el nombre especificado en las posiciones 7 a 21 ser tambin el nombre de rea de datos. Si se especifica, debe ser un nombre de rea de datos. Si no se especifica el parmetro, debe especificarse el nombre de la estructura de datos.
242
Cuando se especifica la palabra clave DTAARA, pueden utilizarse los cdigos de operacin IN, OUT y UNLOCK en el rea de datos.
EXTFLD(nombre_campo)
La palabra clave EXTFLD se utiliza para redenominar un subcampo de una estructura de datos descrita externamente. El parmetro nombre_campo es el nombre externo del subcampo. El nombre del programa a utilizar se especifica en el campo de nombre (posiciones 7-21). La palabra clave es opcional. Si no se especifica, se utiliza el nombre extrado de la definicin externa como el nombre del subcampo de estructura de datos. Si se especifica la palabra clave PREFIX para la estructura de datos, no se aplicar el prefijo a los campos redenominados con EXTFLD.
EXTFMT(cdigo)
La palabra clave EXTFMT especifica el tipo de datos externos para las matrices y las tablas numricas de tiempo de compilacin y de tiempo de preejecucin. El tipo de datos externos es el formato de los datos de los registros del archivo. Esta entrada no tiene ningn efecto en el formato utilizado para el proceso interno (el tipo de datos internos) de la matriz o tabla del programa. Los valores posibles para el parmetro son: S P B C I L R U F Los datos para la matriz o tabla estn en formato decimal con zona. Los datos para la matriz o tabla estn en formato decimal empaquetado. Los datos para la matriz o tabla estn en formato binario. Los datos para la matriz o tabla estn en formato UCS-2. Los datos para la matriz o tabla estn en formato de entero. Los datos para un elemento de tabla o matriz numrica tienen un signo ms o un signo menos a la izquierda. Los datos para una matriz numrica o elemento de tabla tienen un signo ms o menos a continuacin (derecha). Los datos para la matriz o tabla estn en formato sin signo. Los datos para la matriz o tabla estn en formato numrico flotante.
Notas: 1. Si no se especifica la palabra clave EXTFMT, el formato externo toma el valor por omisin S para las matrices y las tablas de no flotantes y la representacin flotante de visualizacin externa para las matrices y tablas de flotantes de tiempo de preejecucin. 2. Para las matrices y tablas de tiempo de compilacin, nicamente se permiten los valores S, L y R, a menos que el tipo de datos sea flotante, en cuyo caso, no se permite la palabra clave EXTFMT. 3. No se permite EXTFMT(I) ni EXTFMT(U) para las matrices definidas con ms de 10 dgitos. Las matrices definidas como de 1 a 5 dgitos ocuparn 2 bytes. Las matrices definidas como de 6 a 10 dgitos ocuparn 4 bytes. 4. Cuando se utiliza EXTFMT(I) o EXTFMT(U), las matrices que se definan para tener de 1 a 5 dgitos ocuparn 2 bytes por elemento. Las matrices que se
243
definan para tener de 6 a 10 dgitos ocuparn 4 bytes por elemento. Las matrices que se definan para tener de 11 a 20 dgitos ocuparn 8 bytes por elemento. 5. El formato externo por omisin de las matrices UCS-2 es de carcter. El nmero de caracteres que se permite tener en los datos UCS-2 en tiempo de compilacin es el nmero de caracteres de doble byte de la matriz UCS-2. 6. No puede utilizarse la palabra clave EXTFMT si los datos para la matriz o tabla residen en la estacin de trabajo.
EXTNAME(nombre_archivo{:nombre_formato})
La palabra clave EXTNAME especifica el nombre del archivo que contiene las descripciones de campo utilizadas como descripcin de subcampo para la estructura de datos que est definindose. El parmetro nombre_archivo es obligatorio. Opcionalmente, puede especificarse un nombre de formato para dirigir el compilador a un formato especfico en un archivo. Si no se especifica nombre_formato, se utiliza el primer formato de registro. Si la definicin de la estructura de datos contiene una E en la columna 22 y no se especifica la palabra clave EXTNAME, se utiliza el nombre especificado en las posiciones 7-21. El compilador genera las entradas de especificacin de definicin siguientes para todos los campos de la estructura de datos descrita externamente: v Nombre de subcampo: este nombre es el mismo que el nombre externo, a menos que se le cambie el nombre mediante la palabra clave EXTFLD o se utilice la palabra clave PREFIX para aplicar un prefijo. v Longitud de subcampo v Tipo de datos interno de subcampo: este nombre es el mismo que el tipo externo, a menos que se especifique la palabra clave de especificacin de control CVTOPT para el tipo. En tal caso, el tipo de datos ser carcter. Con la palabra clave EXTNAME se permite todas las palabras clave de la estructura de datos.
EXTPROC(nombre)
La palabra clave EXTPROC indica el nombre externo del procedimiento cuyo prototipo se est definiendo. El nombre puede ser una constante de caracteres o un puntero de procedimiento. Cuando se especifica EXTPROC, se debe llamar al procedimiento utilizando CALLB o CALLP. Si no se especifica EXTPROC, el compilador asume que se est definiendo un procedimiento y le asigna el nombre externo que se encuentra en las posiciones 7-21. Si el nombre especificado para EXTPROC (o el nombre de prototipo si no se ha especificado EXTPROC) empieza con CEE o un subrayado (_), el compilador lo tratar como una incorporacin del sistema. Si en realidad no es una incorporacin del sistema, aparecer un mensaje de aviso en el listado; Para evitar la confusin con las API que proporciona el sistema, se aconseja que el nombre de los procedimientos no empiece por CEE.
244
Si se especifica un puntero de procedimiento, debe asignrsele una direccin vlida antes de utilizarlo en una llamada. Debe sealar a un procedimiento cuyo valor de retorno y parmetros sean coherentes con la definicin de prototipo. Por ejemplo, para definir el prototipo para el procedimiento SQLAllocEnv, que est en el programa QSQCLI, se puede codificar la especificacin de definicin siguiente:
D SQLEnv PR EXTPROC('SQLAllocEnv')
La Figura 85 muestra un ejemplo de la palabra clave EXTPROC con un puntero de procedimiento como parmetro.
D* Da por supuesto que se est llamando a un procedimiento que tiene un D* puntero de procedimiento como el EXTPROC. As es como se define D* el prototipo: D* D DspMsg PR 10A EXTPROC(DspMsgPPtr) D Msg 32767A D Length 4B 0 VALUE D* D* As es como debe definirse el prototipo que se podra D* that DspMsgPPtr could be assigned to. D* D MyDspMsg PR LIKE(DspMsg) D Msg 32767A D Length 4B 0 VALUE C* C* Antes de llamar a DSPMSG, debe asignar DSPMSGPPTR C* para el nombre de procedimiento real de MyDspMsg, C* es decir, MYDSPMSG. C* C EVAL DspMsgPPtr = %paddr('MYDSPMSG') C EVAL Reply = DspMsg(Msg, %size(Msg)) ... P MyDspMsg B
La forma extendida de la palabra clave EXTPROC slo puede utilizarse para crear prototipos de metodos Java a los que se llama desde aplicaciones Java de VARPG. Consulte el apartado Prototipos de mtodos Java.
Los valores de parmetro posibles son: *JAVA:nombre_clase:nombre_mtodo Identifica el mtodo como mtodo Java que ha sido generado a partir de cdigo escrito inicialmente en Java. *JAVARPG:nombre_clase:nombre_mtodo Identifica un mtodo Java generado por VARPG.
Captulo 18. Especificaciones de definicin
245
Los mtodos generados por VARPG permiten que ciertos tipos de datos sean pasados por referencia cuando normalmente no pueden pasarse por referencia en Java. Esto permite utilizar el mismo cdigo ya sea para tener como destino una aplicacin Windows o para generar cdigo fuente Java. El nombre de clase y el de mtodo deben ser literales de tipo carcter y son sensibles a las maysculas y minsculas. El nombre de clase debe ser un nombre de clase Java totalmente calificado. El nombre de mtodo debe ser el nombre del mtodo al que debe llamarse. Los tipos de datos de los parmetros y el valor de retorno del mtodo se especifican de la misma forma que cuando se crea un prototipo de un subproceso. No obstante, el compilador correlaciona tipos de datos VARPG con los tipos de datos Java tal como se indica a continuacin:
Tipo de datos Java boolean byte[] byte int short long float double cualquier objeto Tipo de datos VARPG indicador (N) alfanumrico (A de cualquier longitud) entero (3I) entero (10I) entero (5I) entero (20I) coma flotante (4F) coma flotante (8F) objeto (O)
Cuando se llama a mtodos generados por VARPG (*JAVARPG), se puede especificar el tipo de datos con zona, empaquetado, binario y sin signo como tipo de datos de los parmetros y los valores de retorno. Los mtodos generados a partir de cdigo escrito inicialmente en Java no pueden utilizar estos tipos de datos en el prototipo para parmetros o valores de retorno. Al llamar a un mtodo, el compilador acepta matrices como parmetros si ste es un prototipo que utiliza la palabra clave DIM. En caso contrario, slo se aceptarn los campos escalares, las estructuras de datos y las tablas. No se puede llamar a mtodos que esperan el tipo de datos Java char ni a los que devuelven este tipo de valor. Si el valor de retorno de un mtodo es un objeto, la clase del objeto se proporciona codificando la palabra clave CLASS en el prototipo. El nombre de clase especificado ser el del objeto que se devuelve. Si el mtodo invocado es esttico, se debe especificar la palabra clave STATIC en el prototipo. En Java, los tipos de datos siguientes slo pueden pasarse por valor:
byte int short long float double
246
Se debe especificar la palabra clave VALUE en el prototipo de los parmetros que sean de estos tipos. La palabra clave VALUE no es necesaria si se llama a mtodos generados por VARPG, ya que estos tipos de datos pueden pasarse por referencia. Los objetos slo se pueden pasar por referencia. La palabra clave VALUE no puede especificarse con tipo O. Debido a que Java percibe las matrices como objetos, los parmetros correlacionados con matrices deben tambin pasarse por referencia. Esto incluye a las matrices de bytes. Si desea obtener ms informacin sobre las llamadas a mtodos Java, as como ejemplos, consulte la publicacin Programacin con VisualAge para RPG.
FROMFILE(nombre_archivo)
La palabra clave FROMFILE especifica el archivo con los datos de entrada para la matriz o tabla de tiempo de preejecucin que se est definiendo. Se debe especificar la palabra clave FROMFILE para cada matriz o tabla de tiempo de preejecucin utilizada en el programa. Consulte el apartado TOFILE(nombre_archivo) en la pgina 261.
INZ{(valor inicial)}
La palabra clave INZ inicializa el campo autnomo, estructura de datos o subcampo de estructura de datos con el valor por omisin para su tipo de datos u opcionalmente en la constante especificada entre parntesis. Cuando se utiliza para inicializar una estructura de datos, no se permite el parmetro de constante. En una estructura de datos descrita por el programa no se permite ningn parmetro en la palabra clave INZ. La constante especificada debe corresponderse con el tipo que est inicializndose. La constante puede ser un literal, una constante con nombre, una constante figurativa o una funcin incorporada. Cuando se inicializan campos de tipo de datos de fecha u hora, o constantes con nombre con valores de fecha u hora, el formato del literal debe corresponderse con el formato por omisin derivado de la especificacin de control, independientemente del formato real del campo de fecha u hora. Un campo numrico se puede inicializar con cualquier tipo de literal numrico. Sin embargo, un literal numrico slo se puede utilizar con un campo flotante. Todo campo numrico puede inicializarse con un literal hexadecimal de 16 dgitos o menos. En este caso, se considera que el literal hexadecimal es un valor numrico sin signo. Si se especifica INZ(*EXTDFT), los subcampos de estructuras de datos descritas externamente se inicializan con los valores por omisin de la palabra clave DFT de las DDS. Si no se especifica DFT ni un valor de constante, se utiliza el valor por omisin correspondiente al tipo de archivo. El valor especificado en las DDS puede alterarse temporalmente codificando INZ con o sin parmetros en la especificacin de subcampo. Si se especifica INZ(*EXTDFT) en la definicin de estructura de datos externa, se inicializarn todos los subcampos descritos externamente tomando el valor por omisin de las DDS. Si la estructura de datos descrita externamente tiene subcampos descritos por programa adicionales, stos se inicializan tomando los valores por omisin RPG.
247
Cuando utilice INZ(*EXTDFT), tenga en cuenta lo siguiente: v Si el valor de las DDS correspondiente al campo de fecha o de la hora no tiene el formato interno RPG, se convertir al formato interno que est en vigor para el programa. v Las descripciones externas deben estar en archivo fsicos. v Si se especifica *NULL para un campo con posibilidad de nulos en las DDS, el compilador utilizar el valor por omisin de las DDS correspondiente a dicho campo como valor inicial. v Si se especifica DFT() para un campo de longitud variable, el campo se inicializar con una serie de longitud 0. v INZ(*EXTDFT) no est permitido si la opcin CVTOPT est en vigor. v Si no se especifica ningn valor inicial, o si se especifica *NULL, para los campos de fecha, hora o indicacin de la hora, el valor inicial del campo se establece en *LOVAL. Una estructura de datos, un subcampo de estructura de datos o un campo autnomo definido con la palabra clave INZ no puede especificarse como un parmetro en una entrada *ENTRY PLIST. Nota: Cuando no se especifica el parmetro INZ: v Los campos autnomos estticos y los subcampos de estructuras de datos inicializados se inicializan con sus valores iniciales por omisin (por ejemplo, espacios en blanco para carcter, 0 para nmero). v Los subcampos de estructuras de datos no inicializados estticos (INZ no especificado en la especificacin de definicin para la estructura de datos) se inicializan mediante espacios en blanco (sin tener en cuenta el tipo de datos). v Los campos del almacenamiento automtico no se inicializan. Esta palabra clave no es vlida en combinacin con BASED.
LIKE(nombre_RPG)
La palabra clave LIKE se utiliza para definir un elemento similar a otro existente. Cuando se especifica la palabra clave LIKE, el elemento que est definindose toma la longitud y el formato de datos del elemento especificado como parmetro. Los campos autnomos, los prototipos, los parmetros y los subcampos de estructuras de datos se pueden definir utilizando esta palabra clave. El parmetro de LIKE puede ser un campo autnomo, una estructura de datos, un subcampo de estructura de datos, un parmetro en una definicin de interfaz de procedimiento o un nombre de prototipo. La entrada de tipo de datos (posicin 40) debe estar en blanco. Esta palabra clave es similar al cdigo de operacin *LIKE DEFINE (vase el apartado Definicin de un campo basndose en otro campo en la pgina 428). No obstante, se diferencia de *LIKE DEFINE en que los datos que se definen adoptan tambin el formato de datos y CCSID adems de la longitud. Nota: El elemento definido no hereda atributos tales como NOOPT, ASCEND, CONST y la posibilidad de nulo del parmetro de LIKE. nicamente se heredan el tipo de datos, la longitud, las posiciones decimales y el CCSID. Si el parmetro de LIKE es un prototipo, el elemento que se est definiendo tendr el mismo tipo de datos que el valor de retorno del prototipo. Si no existe ningn valor de retorno, se emite un mensaje de error.
248
Esta palabra clave se puede utilizar al definir parmetros CALLP. Consulte el apartado Definicin de un campo basndose en otro campo en la pgina 428. Puede utilizarse LIKE para definir campos de caracteres, campos grficos, campos numricos y matrices. A continuacin se indican algunas consideraciones a tener en cuenta al utilizar la palabra clave LIKE con distintos tipos de datos: v En los campos de caracteres, el nmero especificado en la entrada A/Longitud es el nmero de caracteres adicionales (o menor) v En los campos grficos o UCS-2, el nmero especificado en la entrada A/Longitud es el nmero de caracteres grficos o UCS-2 adicionales (o menor) (1 carcter grfico o UCS-2 = 2 bytes). v En los campos numricos, el nmero especificado en la entrada A/Longitud es el nmero de dgitos adicionales (o menor). En los campos enteros o sin signo, los valores de ajuste deben ser tales que el nmero resultante de dgitos del campo sea 3, 5, 10 o 20. Para campos flotantes, no se permite el ajuste de longitud. v En los campos de fecha, hora, indicacin de la hora, puntero de base o puntero de procedimiento, la entrada A/Longitud (posiciones 33-39) debe estar en blanco. Cuando se utiliza LIKE para definir una matriz, sigue siendo necesaria la palabra clave DIM para definir las dimensiones de la matriz. Sin embargo, puede utilizarse DIM(%elem(matriz)) para definir una matriz exactamente igual que otra matriz. A continuacin se facilitan ejemplos de cmo definir datos utilizando la palabra clave LIKE.
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D.....................................Keywords+++++++++++++++++++++++++++++ D* D* Definir un campo como otro con un aumento de longitud de 5 caracteres. D* D Name S 20 D Long_name S +5 LIKE(Name) D* D* Definir una matriz de subcampo de estructura de datos con DIM(20) como D* otro campo e inicializar cada elemento de matriz con el valor *ALL'X'. D* Asimismo, declarar otro subcampo de tipo puntero inmediatamente D* a continuacin del primer subcampo. El puntero se define implcitamente D* con una longitud de 4 bytes. D* D Struct DS D Dim20 LIKE(Name) DIM(20) INZ(*ALL'X') D Pointer *
LINKAGE(tipo_enlace)
Cuando define un nombre de programa que se utilizar con las operaciones CALL y START, la palabra clave LINKAGE especifica la ubicacin del programa al que se llama. Utilice el valor de parmetro *SERVER con esta palabra clave en la operacin CALL. El parmetro *SERVER especifica que el programa que est llamando existe en un servidor AS/400. Utilice el valor del parmetro *CLIENT con esta palabra clave en la operacin START. La palabra clave LINKAGE, junto con la palabra clave DLL, especifica el convenio de enlace (interfaz) que deber utilizarse cuando se invoquen funciones en una
Captulo 18. Especificaciones de definicin
249
DLL. El convenio de enlace especificado debe coincidir con el de la DLL externa a la que ha de accederse. Las API de sistema Windows utilizan el convenio de enlace StdCall. As pues, cuando vaya a crear un prototipo de una API de sistema Windows, especifique LINKAGE(*STDCALL). No utilice la palabra clave LINKAGE si utiliza la palabra clave DLL para crear un prototipo de un subprocedimiento VARPG en una aplicacin NOMAIN. El compilador utilizar el convenio de enlace por omisin OptLink. Cuando cree prototipos de DLL propias, hgalo con el convenio de enlace *STDCALL o bien *OPTLINK. La utilizacin de otros convenios de enlace puede tener un resultado imprevisible o provocar errores de ejecucin.
MSGDATA(msgdata1:msgdata2....)
La palabra clave MSGDATA define el texto de substitucin, utilizado en el factor 1 del cdigo de operacin DSPLY, en forma de lista de nombres de campo que se definen en el programa. El compilador VisualAge RPG sustituye cada variable de substitucin por el correspondiente campo definido. Por ejemplo, %1 se sustituira por el primer campo definido en MSGDATA, %2 por el segundo campo definido en MSGDATA, etc. Las variables de sustitucin se definen entrando el carcter de tanto por ciento (%) seguido de un solo dgito (1 a 9). Puede especificar un mximo de 3 parmetros por palabra clave. Las palabras clave MSGDATA y MSGNBR se utilizan juntas.
MSGTEXT(texto mensaje)
La palabra clave MSGTEXT define el texto del mensaje, que se especifica entre apstrofos (). Este texto se utiliza en el factor 1 del cdigo de operacin DSPLY. Esta palabra clave no se puede utilizar si se usan las palabras clave BUTTON, MSGDATA, MSGNBR, MSGTITLE o STYLE.
MSGTITLE(ttulo)
La palabra clave MSGTITLE especifica el texto del ttulo de la ventana de mensaje (factor 2 del cdigo de operacin DSPLY). Puede especificar un identificador de mensaje de 8 caracteres encerrado entre apstrofos (), por ejemplo, *MSG0001, o un nmero de mensaje de 4 dgitos. Si utiliza un nmero de mensaje, el texto se recuperar del archivo de mensajes. (Utilice la opcin Definir mensajes del Diseador GUI para especificar ttulos con formato de mensaje.) Esta palabra clave no se puede utilizar si se usan las palabras clave MSGDATA, MSGNBR o MSGTEXT.
250
NOOPT
No se llevar a cabo ninguna optimizacin en el campo autnomo, en el parmetro, o en la estructura de datos para la que se ha especificado esta palabra clave. De este modo se asegura que el contenido del elemento de datos sea el ltimo valor asignado. Esto puede ser necesario para aquellos campos cuyos valores se utilicen en el manejo de excepciones. Nota: El optimizador puede mantener algunos valores en los registros y restaurarlos slo para el almacenamiento en puntos definidos previamente durante la ejecucin normal del programa. El manejo de excepciones puede romper esta secuencia de ejecucin normal y, consecuentemente, puede que las variables contenidas en registros no se devuelvan a sus ubicaciones de almacenamiento asignadas. Como resultado, cuando se utilizan dichas variables en el manejo de excepciones, es posible que no contengan el ltimo valor asignado. La palabra clave NOOPT garantiza su actualizacin. Si un elemento de datos que se va a pasar mediante referencia se define con la palabra clave NOOPT, todas las definiciones de parmetros de interfaz de procedimiento o prototipos tambin deben tener especificada la palabra clave NOOPT. Este requisito no se aplica a los parmetros que se pasan mediante valor. Todas las palabras clave permitidas para definiciones de campos autnomos parmetros o definiciones de estructuras de datos estn permitidas con NOOPT. Esta palabra clave se puede utilizar al definir parmetros CALLP.
NOWAIT
La palabra clave NOWAIT permite llamar a un programa AS/400 que utilice un archivo de estacin de trabajo. Consulte la seccin Llamada a un programa AS/400 que utiliza un archivo de estacin de trabajo en la pgina 406 para obtener ms detalles.
OCCURS(constante_numrica)
La palabra clave OCCURS especifica el nmero de apariciones de una estructura de datos de mltiples apariciones. El parmetro constante_numrica debe ser un valor mayor que cero sin posiciones decimales. Puede ser un literal numrico, una funcin incorporada que devuelve un valor numrico o una constante numrica. El valor de constante debe conocerse en el momento de procesar la palabra clave o de lo contrario se producir un error de tiempo de compilacin. Esta palabra clave no es vlida para una estructura de datos de estado de programa, una estructura de datos de informacin de archivo o una estructura de datos de rea de datos. Si una estructura de datos de mltiples apariciones contiene subcampos de puntero, la distancia entre las apariciones debe ser un mltiple exacto de 4 debido a las limitaciones de almacenamiento del sistema para punteros. Esto significa que la distancia entre apariciones puede ser mayor que la longitud de cada aparicin. El ejemplo siguiente muestra la asignacin del almacenamiento de una estructura de datos de mltiples apariciones con subcampos de puntero.
251
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... * DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords++++++++++++++++++++++++++++ D DS1 DS OCCURS(2) D POINTER 4* D FLD5 5 D DS2 DS OCCURS(2) D CHAR16 4 D CHR5 5 Asignacin de campos en el almacenamiento. Las apariciones de DS1 estn separadas por 8 bytes, mientras que las apariciones de DS2 estn separadas por 9 bytes.
Figura 87. Asignacin de almacenamiento de estructuras de datos de mltiples apariciones con subcampos de puntero
252
longitud variable, puede utilizar la funcin incorporada %LEN para determinar cul es la longitud actual del parmetro pasado. Si no se especifica OPTIONS(*VARSIZE) para los campos de longitud fija, debe pasar como mnimo tantos datos como requiera el prototipo; en el caso de los campos de longitud variable, el parmetro debe tener la misma longitud mxima declarada que la indicada en la definicin. Nota: En las opciones de paso de parmetros *OMIT y *VARSIZE, es responsabilidad del programador del procedimiento asegurarse de que dichas opciones se manejen. Al especificar OPTIONS(*STRING) para un parmetro de puntero de base pasado mediante valor o mediante una referencia de constante, se puede pasar tanto un puntero como una expresin de caracteres. Si se pasa una expresin de carcter, se crea un valor temporal que contiene el valor de la expresin de carcter seguida de un terminador de nulo (x00). La direccin de este valor temporal se pasa al programa o procedimiento llamados. Cuando en un prototipo de funcin se especifica OPTIONS(*RIGHTADJ) para un parmetro CONST o VALUE, el valor del parmetro de tipo carcter, grfico o UCS-2 se ajusta a la derecha. No se permite esta palabra clave en un parmetro de longitud variable dentro del prototipo de una funcin. Los valores de longitud variable pueden pasarse como parmetros en una llamada a procedimiento cuando se define el correspondiente parmetro con OPTIONS(*RIGHTADJ). El ejemplo siguiente muestra cmo codificar un prototipo y un procedimiento utilizando OPTIONS(*OMIT) para indicar que es posible pasar el valor especial *OMIT como parmetro.
253
F* FQSYSPRT O F 10 PRINTER USROPN D* D* En el prototipo siguiente se describe un procedimiento que permite D* pasar como parmetro el valor especial *OMIT. D* Si se pasa el parmetro, se establece en '1' si se produce un error D* y en '0' si no. D OpenFile PR D Error 1A OPTIONS(*OMIT) C* C SETOFF 10 C* En la primera llamada a OpenFile se supone que no habr errores, C* por lo que no se preocupa del cdigo de error y pasa *OMIT. C CALLP OpenFile(*OMIT) C* C* La segunda llamada a OpenFile pasa un indicador, de manera que C* se pueda comprobar si se ha producido un error. C CALLP OpenFile(*IN10) C IF *IN10 C ... an error occurred C ENDIF C RETURN P*---------------------------------------------------------------P* OpenFile P* Este procedimiento debe comprobar el nmero de parmetros desde P* que se ha definido el segundo con OPTIONS(*NOPASS). P* Debe utilizar el segundo parmetro slo si se ha pasado. P*---------------------------------------------------------------P OpenFile B D OpenFile PI D Error 1A OPTIONS(*OMIT) D SaveIn01 S 1A C* Guardar el valor actual del indicador 01 por si se utiliza C* en otro sitio. C EVAL SaveIn01 = *IN01 C* Abrir el archivo. *IN01 inidicar si se produce un error. C OPEN QSYSPRT 01 C* Si se ha pasado el parmetro Error, actualizarlo con el indicador C IF %ADDR(Error) <> *NULL C EVAL Error = *IN01 C ENDIF C* Restaurar *IN01 a su valor original. C EVAL *IN01 = SaveIn01 P OpenFile E
El ejemplo siguiente muestra cmo codificar un prototipo y un procedimiento que permitan parmetros de longitud variable, con OPTIONS(*VARSIZE).
254
D* En el prototipo siguiente se describe un procedimiento que permite D* pasar una matriz de longitud variable y un campo de tipo carcter D* de longitud variable. El resto de parmetros indican las longitudes. D Search PR 5U 0 D SearchIn 50A OPTIONS(*VARSIZE) D DIM(100) CONST D ArrayLen 5U 0 VALUE D ArrayDim 5U 0 VALUE D SearchFor 50A OPTIONS(*VARSIZE) CONST D FieldLen 5U 0 VALUE D* D Arr1 S 1A DIM(7) CTDATA PERRCD(7) D Arr2 S 10A DIM(3) CTDATA D Elem S 5U 0 C* Llamar a Search para buscar una matriz de 7 elementos de longitud 1 C* con un arcgumento de bsqueda de longitud 1. Dado que '*' es el 5 C* elemento de la matriz, el valor de Elem ser 5. C EVAL Elem = Search(Arr1 : C %SIZE(Arr1) : %ELEM(Arr1) : C '*' : 1) C* Llamar a Search para buscar una matriz de 3 elementos de longitud 10 C* con un arcgumento de bsqueda de longitud 4. Dado que 'Pink' no est C* en la matriz, el valor de Elem ser 0. C EVAL Elem = Search(Arr2 : C %SIZE(Arr2) : %ELEM(Arr2) : C 'Pink' : 4) C RETURN
255
P*-----------------------------------------------------------P* Search: P* Busca SearchFor en la matriz SearchIn. Devuelve P* el elemento en el que se encuentra el valor 0 si no se encuentra. P* Los parmetros de tipo carcter pueden tener una longitud o P* dimensin cualquiera, ya que OPTIONS(*VARSIZE) est especificado P* para ambas. P*-----------------------------------------------------------P Search B D Search PI 5U 0 D SearchIn 50A OPTIONS(*VARSIZE) D DIM(100) CONST D ArrayLen 5U 0 VALUE D ArrayDim 5U 0 VALUE D SearchFor 50A OPTIONS(*VARSIZE) CONST D FieldLen 5U 0 VALUE D I S 5U 0 C* Comprobar los elementos de la matriz para ver si iguales que C* en SearchFor. Utilizar la dimensin que se ha pasado como C* parmetro en lugar de la dimensin declarada. Utilizar C* %SUBST con la longitud de parmetro, ya que stos pueden C* no tener la longitud declarada. C 1 DO ArrayDim I 5 0 C* Si este elemento coincide con SearchFor, volver al ndice. C IF %SUBST(SearchIn(I) : 1 : ArrayLen) C = %SUBST(SearchFor : 1 : FieldLen) C RETURN I C ENDIF C ENDDO C* No se ha encontrado ningn elemento coincidente. C RETURN 0 P Search E **CTDATA ARR1 A2$@*jM **CTDATA ARR2 Rojo Azul Amarillo
El ejemplo siguiente muestra cmo utilizar OPTIONS(*STRING) para codificar prototipo y un procedimiento que utilicen una serie terminada en nulo variable.
256
D* En el prototipo siguiente se describe un procedimiento que espera D* un parmetro de serie terminado en nulo. Devuelve la longitud D* de la serie. D StringLen PR 5U 0 D Pointer * VALUE OPTIONS(*STRING) D P S * D Len S 5U 0 C* C* Llamar a StringLen con un literal de tipo carcter. El resultado ser C* 4, ya que el literal tiene una logitud de 4 bytes. C EVAL Len = StringLen('abcd') C* C* Llamara a StringLen con un puntero que seala a una serie. Utilizar ALLOC C* para conseguir almacenamiento para el puntero y %STR para inicializar el C* almacemiento en 'My string' donde '' representa el carcter C* de terminacin nula x'00'. C* El resultado ser 9, que es la longitud de 'My string'. C ALLOC 25 P C EVAL %STR(P:25) = 'My string' C EVAL Len = StringLen(P) C* Liberar el almacenamiento. C DEALLOC P C RETURN P*-----------------------------------------------------------P* StringLen: P* Devuelve la longitud de la serie a la que seala el P* parmetro. P*-----------------------------------------------------------P StringLen B D StringLen PI 5U 0 D Pointer * VALUE OPTIONS(*STRING) C RETURN %LEN(%STR(Pointer)) P StringLen E
OVERLAY(nombre{:pos | *NEXT})
La palabra clave OVERLAY solapa el almacenamiento de un subcampo con el de otro o con el de la estructura de datos en s. Esta palabra clave nicamente se permite para subcampos de estructuras de datos. El subcampo Nombre de entrada solapa el almacenamiento especificado mediante el nombre de parmetro en la posicin especificada por el parmetro de posicin. Si no se especifica posicin, toma por omisin el valor de 1. Nota: El parmetro de posicin est en unidades de bytes, independientemente de los tipos de los subcampos. Al especificar OVERLAY(nombre:*NEXT) coloca el subcampo en la siguiente posicin disponible dentro del campo solapado. (Esta posicin ser el primer byte situado despus de todos los otros subcampos anteriores a este subcampo que solapen el mismo subcampo.) Las reglas siguientes se aplican a la palabra clave OVERLAY: v El parmetro de nombre debe ser el nombre de un subcampo definido anteriormente en la estructura de datos actual o el nombre de la estructura de datos actual.
257
v El parmetro de posicin (si se especifica) debe ser un valor mayor que 0 sin posiciones decimales. Puede ser un literal numrico, una funcin incorporada que devuelve un valor numrico o una constante numrica. Si el parmetro de posicin es una constante con nombre, debe definirse antes de esta especificacin. v La palabra clave OVERLAY no est permitida cuando no est en blanco la entrada Desde posicin. v Si el parmetro de nombre es un subcampo, el subcampo que se est definiendo debe estar contenido completamente dentro del subcampo especificado por el parmetro de nombre. v El campo que se est definiendo debe estar contenido completamente dentro del subcampo especificado por el parmetro de nombre. v La alineacin de subcampos definidos utilizando la palabra clave OVERLAY se debe llevar a cabo manualmente. Si no estn alineados correctamente, se emite un mensaje de aviso. v Si el subcampo especificado como el primer parmetro de la palabra clave OVERLAY es una matriz, la palabra clave OVERLAY se aplica a cada elemento de la matriz. Es decir, el campo se define como una matriz con el mismo nmero de elementos. El primer elemento de esta matriz solapa el primer elemento de la matriz solapada, el segundo elemento de esta matriz solapa el segundo elemento de la matriz solapada, y as sucesivamente. No se pueden especificar palabras clave de matriz para el subcampo con la palabra clave OVERLAY en esta situacin. Consulte la Figura 91 en la pgina 259 y SORTA (Clasificar una matriz) en la pgina 539. Si el nombre de subcampo, especificado como el primer parmetro de la palabra clave OVERLAY, es una matriz y su longitud de elemento es mayor que la longitud del subcampo que est definindose, no se almacenarn de modo contiguo los elementos de matriz del subcampo que est definindose. Dicha matriz no est permitida como el campo de resultado de una operacin PARM o del Factor 2 ni como el campo de resultado de una operacin MOVEA. v Si se especifica la palabra clave ALIGN en la estructura de datos, los subcampos definidos con OVERLAY(nombre:*NEXT) se alinean utilizando su alineacin preferida. Los subcampos de puntero siempre se alinean en un lmite de 4 bytes. v Si un subcampo con subcampos solapados no se define de otro modo, se define implcitamente del modo siguiente: La posicin inicial es la primera posicin disponible en la estructura de datos. Su longitud es la longitud mnima que puede contener todos los campos solapados. Si el subcampo se define como una matriz, su longitud se aumentar para garantizar una alineacin correcta de todos los subcampos solapados. Ejemplos
258
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... * DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords++++++++++++++++++++++++++++ D DataStruct DS D A 10 DIM(5) D B 5 OVERLAY(A) D C 5 OVERLAY(A:6) Asignacin de campos en el almacenamiento: A(1) B(1) C(1) A(2) B(2) C(2) A(3) B(3) C(3) A(4) B(4) C(4) A(5) B(5) C(5)
Figura 91. Asignacin de almacenamiento de subcampos con palabras clave DIM y OVERLAY
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... * DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords++++++++++++++++++++++++++++ D DataStruct DS D A 5 D B 1 OVERLAY(A) DIM(4) Asignacin de campos en el almacenamiento: A B(1) B(2) B(3) B(4)
Figura 92. Asignacin de almacenamiento de subcampos con palabras clave DIM y OVERLAY
El siguiente ejemplo muestra dos modos equivalentes de definir posiciones solapadas de subcampos: explcitamente con (nombre:pos) e implcitamente con (nombre:*NEXT).
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... * DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ * Definir explcitamente posiciones solapadas de subcampos D DataStruct DS D PartNumber 10A D Family 3A OVERLAY(PartNumber) D Sequence 6A OVERLAY(PartNumber:4) D Language 1A OVERLAY(PartNumber:10) *.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... * DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ * Definir posiciones solapadas de subcampos con *NEXT D DataStruct DS D PartNumber D Family 3A OVERLAY(PartNumber) D Sequence 6A OVERLAY(PartNumber:*NEXT) D Language 1A OVERLAY(PartNumber:*NEXT)
PACKEVEN
La palabra clave PACKEVEN indica que la matriz o campo empaquetado tiene una cantidad par de dgitos. La palabra clave slo es vlida para los subcampos de estructura de datos descritos por programa empaquetados que se han definido
Captulo 18. Especificaciones de definicin
259
utilizando las posiciones DESDE/A. Para un elemento de campo o matriz de longitud N, si no se ha especificado la palabra clave PACKEVEN, el nmero de dgitos es 2N - 1; si se ha especificado la palabra clave PACKEVEN, el nmero de dgitos es 2(N-1).
PERRCD(constante_numrica)
La palabra clave PERRCD especifica el nmero de elementos por registro para una matriz o tabla de tiempo de preejecucin o tiempo de compilacin. Si no se especifica la palabra clave PERRCD, el nmero de elementos por registro toma el valor por omisin de uno (1). El parmetro constante_numrica debe ser un valor mayor que cero sin posiciones decimales. Puede ser un literal numrico, una funcin incorporada que devuelve un valor numrico o una constante numrica. Si el parmetro no es una constante con nombre, debe definirse antes de esta especificacin. La palabra clave PERRCD nicamente es vlida cuando se especifica la palabra clave FROMFILE, TOFILE o CTDATA.
PREFIX(serie_prefijo{:nm_de_car_sustit})
La palabra clave PREFIX especifica una serie que ha de ser un prefijo de los nombres de subcampo de la estructura de datos descrita externamente que se est definiendo. Adems, opcionalmente puede especificar un valor numrico para indicar el nmero de caracteres, si existe alguno, a sustituir del nombre existente. Si no se especifica el parmetro num_de_car_sustit, la serie se une al principio del nombre. Si se especifica nm_de_car_sustit, debe ser un valor numrico comprendido entre 0 y 9 sin posiciones decimales. Especificar un valor de cero es equivalente a no especificar nm_de_car_sustit en absoluto. Por ejemplo, la especificacin PREFIX(YE:3) cambiara el nombre de campo YTDTOTAL por YETOTAL. Se aplican las reglas siguientes: v Los subcampos que se redenominan explcitamente utilizando la palabra clave EXTFLD no estn afectados por esta palabra clave. v La longitud total de un nombre despus de aplicar el prefijo no debe exceder de la longitud mxima de un nombre de campo RPG. v Si el nmero de caracteres del nombre al que se aade el prefijo es inferior o igual al valor que representa el parmetro num_de_car_sustit, se sustituye el nombre completo por serie_prefix.
PROCPTR
La palabra clave PROCPTR define un elemento como un puntero de procedimiento. El campo Tipo de datos internos (posicin 40) debe contener un *.
STATIC
La palabra clave STATIC especifica que el elemento de datos se guardar en un almacenamiento esttico y, por consiguiente, mantendr su valor a travs de las llamadas al procedimiento en el que se ha definido. La palabra clave nicamente se puede utilizar dentro de un subprocedimiento. Todos los campos globales son estticos. El elemento de datos se inicializa al activar el subprocedimiento en el que est contenido. No se reinicializa, aunque se vuelva a llamar al subprocedimiento.
260
Si no se especifica STATIC, todos los elementos de datos definidos localmente se almacenan en almacenamiento automtico. Los datos almacenados en almacenamiento automtico se inicializan al principio de cada llamada. Cuando se llama a un procedimiento reiteradamente, cada invocacin obtiene su propia copia del almacenamiento.
STYLE(tipo_estilo)
La palabra clave STYLE indica el tipo de estilo utilizado para la ventana de mensaje (factor 2 del cdigo de operacin DSPLY). El tipo de estilo puede ser una de las constantes figurativas siguientes: v *INFO v *WARN v *HALT Esta palabra clave no se puede utilizar si se usan las palabras clave MSGDATA, MSGNBR o MSGTEXT.
TIMFMT(formato{separador})
La palabra clave TIMFMT especifica un formato horario interno y, opcionalmente, el separador horario para cualquiera de estos elementos de tipo Hora: campo independiente; subcampo de estructura de datos; parmetro de prototipo o valor de retorno en una definicin de interfaz de procedimiento o de prototipo. Esta palabra clave se genera automticamente para un subcampo de estructura de datos descrito externamente de tipo Hora. Si no se especifica TIMFMT, los campos de tipo Hora tendrn el formato horario y el separador del campo especificados en la palabra clave TIMFMT de la especificacin de control, si est presente. Si no se especifica en la especificacin de control, tendr el formato *ISO. Consulte la Tabla 20 en la pgina 127 para ver cules son los formatos y los separadores vlidos. La jerarqua utilizada al determinar el formato interno y el separador para una matriz o campo de hora proviene de: 1. La palabra clave TIMFMT indicada en la especificacin de definicin 2. La palabra clave TIMFMT indicada en la especificacin de control 3. *ISO
TOFILE(nombre_archivo)
La palabra clave TOFILE especifica un archivo de destino en el que se escribe una tabla o matriz de tiempo de preejecucin o de tiempo de compilacin. Si se ha de grabar una matriz o tabla, especifique como el parmetro de la palabra clave el nombre del archivo combinado. Este archivo tambin debe definirse en las especificaciones de descripcin de archivo. Una matriz o tabla slo puede grabarse en un dispositivo de salida. Si se ha de grabar una matriz o archivo en el mismo archivo desde el que se ha ledo, debe especificarse como parmetro TOFILE el mismo nombre de archivo que se ha especificado como parmetro FROMFILE. Este archivo debe definirse como un archivo combinado (C en la posicin 17 de la especificacin de descripcin de archivo).
261
VALUE
La palabra clave VALUE indica que el parmetro se pasa por valor en lugar de por referencia. Los parmetros se pueden pasar por valor al llamar al procedimiento al que estn asociados utilizando una llamada de procedimiento. Cuando se utiliza la palabra clave CLTPGM, los parmetros deben pasarse por valor. Las reglas sobre qu se puede pasar como parmetro por valor a un procedimiento llamado son las mismas por que rigen lo se puede asignar utilizando la operacin EVAL. El parmetro recibido por el procedimiento corresponde al lado izquierdo de la expresin; al parmetro pasado corresponde al lado derecho. Consulte el apartado EVAL (Evaluar expresin) en la pgina 446 si desea ms informacin.
VARYING
La palabra clave VARYING indica que un campo de tipo carcter, grfico o UCS-2, definido en las especificaciones de definicin, debe tener un formato de longitud variable. Si no se especifica esta palabra clave en los campos de tipo carcter, grfico o UCS-2, se definirn con una longitud fija. Si desea ms informacin, consulte el apartado Formato carcter, grfico y UCS-2 de longitud variable en la pgina 105.
262
A A
A R
R R R R A A R A A A A A A A A A A A A A
A A R A A A A
Tabla 32. Palabras clave de estructura de datos, campos autnomos, constantes con nombre y ventana de mensajes
Subcampo de estructura Subcampo de datos externo Constante Ventana con de nombre mensaje
Palabra clave ALIGN ALT ASCEND BASED BUTTON CCSID CONST (1.) CTDATA (2.) DATFMT DESCEND DIM DTAARA (2.) EXTFLD EXTFMT EXTNAME (4.)
Estructura de datos A
Campo autnomo
A A A
A A
A A A A
A R
A A A A A A
A A
A A
A A A
A A A A A
263
Tabla 32. Palabras clave de estructura de datos, campos autnomos, constantes con nombre y ventana de mensajes (continuacin)
Subcampo de estructura Subcampo de datos externo A A A A A A Constante Ventana con de nombre mensaje
Palabra clave FROMFILE (2.) INZ LIKE LINKAGE MSGDATA MSGNBR MSGTEXT MSGTITLE NOOPT OCCURS OVERLAY PACKEVEN PERRCD PREFIX (4.) PROCPTR STATIC (3.) STYLE TIMFMT TOFILE (2.) VARYING Nota: 1
Estructura de datos
Campo autnomo A A A R
R A A A A
A A A A A A A A A
A A A
A A A A
A A A
Cuando se define una constante con nombre, la palabra clave es opcional, pero el parmetro para la palabra clave es obligatorio. Por ejemplo, para asignar el valor 10 a una constante con nombre, se puede especificar CONST(10) o 10. Esta palabra clave slo se aplica a definiciones globales. Esta palabra clave slo se aplica a definiciones locales. Esta palabra clave slo se aplica a estructuras de datos descritas externamente.
2 3 4
264
265
266
v Las entradas de descripcin de campo (posiciones 31 a 74), que describen los campos de los registros. Cada campo est descrito en una lnea diferente, debajo de su entrada de identificacin de registro correspondiente.
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 I........................Fmt+SPFrom+To+++DcField+++++++++....FrPlMnZr......Comments++++++++++++
Descrito externamente
En los archivos descritos externamente, las entradas de las especificaciones de entrada se dividen en las categoras siguientes: v Entradas de identificacin de registro (posiciones 7 a 16 y 21 a 22), que identifican el registro (el formato de registro descrito externamente) al que se aadirn funciones VARPG.
267
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 IRcdname+++....Ri..........................................................Comments++++++++++++
v Entradas de descripcin de campo (posiciones 21 a 30, 49 a 66 y 69 a 74), que describen las funciones VARPG a aadir a los campos del registro. Las entradas de descripcin de campo se graban en las lneas a continuacin de las entradas de identificacin de registro correspondientes.
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 I..............Ext-field+..................Field+++++++++......PlMnZr......Comments++++++++++++
268
Puede utilizarse un nmero ilimitado de lneas AND/OR. Para obtener ms informacin consulte Relacin AND en la pgina 271 y Relacin OR en la pgina 271.
Posicin 19 (Reservada)
Entrada Explicacin Blanco No se comprueba en los tipos de registro la existencia de una secuencia especial (las posiciones 17 y 18 tienen entradas alfanumricas).
Posicin 20 (Opcin)
Entrada Explicacin Blanco Esta entrada debe estar en blanco cuando las posiciones 17 y 18 contienen una entrada alfanumrica.
Los indicadores especificados en estas posiciones se utilizan junto con los cdigos de identificacin de registro (posiciones 23 a 46).
Indicadores
Las posiciones 21 y 22 asocian un indicador con el tipo de registro definido en esta lnea. Puede entrar 01 a 99 o LR. Cuando se selecciona un registro para su proceso y satisface las condiciones indicadas por los cdigos de identificacin de registro, se activa el indicador de identificacin de registro correspondiente. Este indicador puede utilizarse para condicionar las operaciones de clculo y salida. El programador puede activar o desactivar los indicadores de identificacin de registro.
269
de identificacin. Pueden especificarse ms de tres cdigos de identificacin de registro en lneas adicionales con la relacin AND/OR. Si el archivo contiene slo un tipo de registro, los cdigos de identificacin pueden dejarse en blanco; sin embargo, debe realizarse una entrada de indicador de identificacin de registro (posiciones 21 y 22) y una entrada de secuencia (posiciones 17 y 18). Nota: Los cdigos de identificacin de registro no son aplicables para el proceso del tipo de datos grfico UCS-2: se efecta una identificacin de registro slo en las posiciones de un solo byte. Pueden realizarse tres series de entradas en las posiciones 23 a 46: 23 a 30, 31 a 38 y 39 a 46. Cada serie se divide en cuatro grupos: ,,, . posicin, no, componente de cdigo y carcter. La tabla siguiente muestra qu posiciones de cada serie utilizan las categoras.
Categora Posicin No Componente de cdigo Carcter 23-30 23-27 28 29 30 31-38 31-35 36 37 38 39-46 39-43 44 45 46
No es necesario que las entradas de estas series estn en secuencia. Por ejemplo, puede realizarse una entrada en las posiciones 31 a 30 sin que se requiera una entrada en las posiciones 23 a 30. No son necesarias las entradas para los cdigos de identificacin de registro si los registros de entrada de un archivo son del mismo tipo. Una especificacin de entrada que no contenga un cdigo de identificacin de registro define el ltimo tipo de registro para el archivo, permitiendo de este modo el manejo de cualquier tipo de registros no definidos. Si no se satisface ningn cdigo de identificacin de registro, el control pasa a la rutina VARPG que maneja las excepciones/errores.
270
Carcter (C): La entrada C indica que se ha de comprobar toda la estructura (zona y dgito) del carcter. Dgito (D): La entrada D indica que se ha de comprobar la parte de dgito del carcter. Los cuatro bits situados ms a la derecha se comparan con el carcter especificado en la entrada de posicin.
Relacin AND
La relacin AND se utiliza cuando ms de tres cdigos de identificacin de registros identifican un registro. Para utilizar la relacin AND, entre como mnimo un cdigo de identificacin de registro en la primera lnea y entre los cdigos de identificacin de registro restantes en las lneas siguientes con AND codificado en las posiciones 16 a 18 para cada lnea adicional que se utilice. Las posiciones 7 a 15, 19 a 20 y 46 a 80 de cada lnea con AND en las posiciones 16 a 18 deben estar en blanco. Las entradas del indicador de identificacin de registro y secuencia se efectan en la primera lnea del grupo y no pueden especificarse en las lneas adicionales. Puede utilizarse un nmero ilimitado de lneas AND/OR en las especificaciones de entrada.
Relacin OR
La relacin OR se utiliza cuando dos o ms tipos de registros tienen campos comunes. Para utilizar la relacin OR, entre OR en las posiciones 16 y 17. Las posiciones 7 a 15, 18 a 20 y 46 a 80 deben estar en blanco. Puede entrarse un indicador de identificacin de registro en las posiciones 21 y 22. Si se realiza la entrada del indicador y se satisfacen los cdigos de identificacin de registro de la lnea OR, se activa el indicador especificado en las posiciones 21 y 22 de dicha lnea. Si no se efecta ninguna entrada de indicador, se activa el indicador de la lnea anterior. Puede utilizarse un nmero ilimitado de lneas AND/OR en las especificaciones de entrada.
271
272
Para efectuar una entrada en este campo, debe realizarse tambin una entrada en las posiciones 31-34 (formato de fecha/hora externo).
La entrada en la posicin 36 especifica el tipo de datos y, si son numricos, el formato externo de los datos en el archivo descrito por programa. Esta entrada no afecta al formato utilizado para el proceso interno en el campo de entrada del programa.
273
El nmero mximo de posiciones del registro de entrada para cada tipo de campo es:
Nmero de posiciones 30 16 4 8 8 8 31 10 8 26 32766 32766 32766 32766 32766 Tipo de campo Numrico con zona (30 dgitos) Numrico empaquetado (30 dgitos) Binario (9 dgitos) Entero (20 dgitos) Sin signo (20 dgitos) Flotante (8 bytes) Numrico con signo inicial o de cola (30 dgitos) Fecha Hora Indicacin de la hora Carcter (32766 caracteres) Carcter de longitud variable (32764 caracteres) Grfico o UCS-2 (16383 caracteres de doble byte) Grfico o UCS-2 de longitud variable (16382 caracteres de doble byte) Estructura de datos
El tamao mximo de un campo de tipo carcter o estructura de datos especificado como campo de entrada descrito por programa es 32766, ya que sta es la longitud mxima de registro de un archivo. A la hora de especificar un campo de entrada de tipo carcter, grfico o UCS-2 de longitud variable, la longitud incluye el prefijo de longitud de 2 bytes. Para matrices, entre la posicin inicial de la matriz en las posiciones 37 a 41 y la posicin final en las posiciones 42 a 46. La longitud de la matriz debe ser un mltiplo entero de la longitud de un elemento. La posicin Desde-a no tiene que tener en cuenta todos los elementos de la matriz. La ubicacin de los datos en la matriz comienza por el primer elemento.
Esta entrada, utilizada con la entrada de formato de datos en la posicin 36, describe el formato del campo. Una entrada en este campo identifica el campo de entrada como numrico (excepto numrico flotante); si se trata de un campo numrico, se debe efectuar una entrada. El nmero de posiciones decimales especificado para un campo numrico no puede sobrepasar la longitud del campo.
274
Nombre simblico Nombre de campo, nombre de estructura de datos, nombre de subcampo de estructura de datos, nombre de matriz, elemento de matriz PAGE, PAGE1-PAGE7, *IN, *INxx o *IN(xx). Estas posiciones nombran los campos de un registro de entrada que se utilizan en un programa VARPG. Estos nombres deben seguir las reglas de los nombres simblicos. Para hacer referencia a toda una matriz en las especificaciones de entrada, entre el nombre de matriz en las posiciones 49 a 62. Si se entra un nombre de matriz en las posiciones 49 a 62, los indicadores de campo (posiciones 67 a 68) deben estar en blanco. Para hacer referencia a un elemento de una matriz, especifique el nombre de la matriz, seguido por un ndice entre parntesis. El ndice es un campo numrico con cero posiciones decimales o el nmero real del elemento de matriz que se ha de utilizar. El valor del ndice puede variar de 1 a n, donde n es el nmero de elementos contenidos en la matriz.
Los indicadores de relacin de registro de campo se utilizan para asociar campos en un tipo de registro determinado cuando el tipo de registro es uno de los que figuran en una relacin OR. Esta entrada reduce el nmero de lneas que deben grabarse. El campo descrito en una lnea se extrae del registro slo cuando el indicador codificado en las posiciones 67 y 68 est activado o cuando las posiciones 67 y 68 estn en blanco. Cuando las posiciones 67 y 68 estn en blanco, el campo es comn a todos los tipos de registros definidos mediante la relacin OR.
275
Las entradas en las posiciones 69 a 74 comprueban el estado de un campo o de un elemento de matriz a medida que se lee en el programa. Los indicadores de campo se especifican en la misma lnea que el campo que se va a comprobar. Dependiendo del estado del campo (ms, menos, cero o blanco), se activa el indicador correspondiente y puede utilizarse para condicionar especificaciones posteriores. Puede especificarse el mismo indicador en dos posiciones, pero no debe utilizarse para las tres posiciones. No pueden utilizarse los indicadores de campo con matrices que estn indexadas. Las posiciones 69 y 70 (ms) y las posiciones 71 y 72 (menos) son vlidas slo para campos numricos. Las posiciones 73 y 74 pueden utilizarse para averiguar si un campo numrico contiene ceros o un campo de tipo carcter, grfico o UCS-2 contiene blancos. Los indicadores de campo se activan si el campo o elemento de matriz rene la condicin especificada cuando se lee el registro. Cada indicador de campo est relacionado slo con un tipo de registro; por lo tanto, los indicadores no se restablecern (activan o desactivan) hasta que se vuelva a leer el registro relacionado o hasta que el indicador se defina en alguna otra especificacin.
276
de registro que sigan a la lnea de registro forman parte de la alteracin temporal del registro hasta que se encuentre otro nombre de formato de registro o nombre de archivo en las posiciones 7 a 16 de las especificaciones de entrada. Todas las lneas de registro que pertenecen a un archivo descrito externamente deben aparecer juntas; no pueden mezclarse con entradas para otros archivos.
277
Los indicadores de campo nicamente estn permitidos para campos con posibilidad de nulos si se ha especificado la opcin Control del usuario o la palabra clave ALWNULL(*USRCTL). Si el campo con posibilidad de nulos contiene un valor nulo, el indicador se desactiva. Vea Posiciones 69-74 (Indicadores de campo) en la pgina 276 para los archivos descritos por programa.
278
279
280
281
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 C.............................Extended-factor2-continuation++++++++++++++++Comments++++++++++++
SR
AN, OR
Identificador de subrutina
Una entrada SR en las posiciones 7 y 8 puede utilizarse opcionalmente para operaciones en subrutinas como una ayuda para fines de documentacin. Los cdigos de operacin BEGACT y ENDACT sirven como delimitadores para una subrutina de accin. Los cdigos de operacin BEGSR y ENDSR sirven como delimitadores para una subrutina.
282
Un blanco en la posicin 9 indica que el indicador debe estar activado para que se lleve a cabo el clculo. Una N en la posicin 9 indica que el indicador asociado debe estar desactivado para que se lleve a cabo el clculo.
Ampliador de operacin
Entrada Explicacin Blanco No se ha suministrado un ampliador de operacin H El resultado de la operacin numrica se redondea y los indicadores resultantes se establecen segn el valor del campo de resultado despus del redondeo El registro se ha ledo, pero no se ha bloqueado para las operaciones READ, READE, READP, READPE o CHAIN de un archivo de disco de actualizacin Establece el puntero para *NULL despus de DEALLOC satisfactorio P Si el campo de resultado es mayor que el resultado de la operacin, rellena este campo con espacios en blanco Pasa descriptores de operacin en una llamada enlazada D T Z M R E Campo de fecha Campo de hora Campo de indicacin de la hora Reglas de precisin por omisin Reglas de precisin de Posicin decimal de resultado Manejo de errores
Los ampliadores de operacin proporcionan atributos adicionales a las operaciones que acompaan. Los ampliadores de operacin se especifican en las posiciones 26 a 35 de las especificaciones de clculo. Deben empezar a la derecha del cdigo de
283
operacin y estar incluidas entre parntesis; se pueden utilizar espacios en blanco para facilitar la lectura. Por ejemplo, las siguientes son entradas vlidas: MULT(H), MULT (H), MULT (H). Se puede especificar ms de un ampliador de operacin. Por ejemplo, la operacin EVAL puede especificar tanto las reglas de redondeo como las de precisin por omisin con EVAL(HM). Una H indica si debe redondearse el contenido del campo del resultado. Los indicadores resultantes se establecen segn el valor del campo del resultado despus de haberse realizado el redondeo. Una N en una operacin READ, READE, READP, READPE o CHAIN en un archivo de disco de actualizacin indica que el registro se va a leer, pero no se va a bloquear. Si no se especifica ningn valor, se lleva a cabo la accin de bloqueo por omisin. Una N en una operacin DEALLOC indica que el puntero del campo de resultado debe establecerse para *NULL despus de una desasignacin satisfactoria. Una P indica que el campo de resultado se rellenar despus de ejecutar la instruccin si el campo del resultado es mayor que el resultado de la operacin. Con el cdigo de operacin TEST se pueden utilizar los ampliadores D, T y Z para indicar un campo de fecha, de hora o de indicacin de la hora. R y M se especifican para la precisin de expresiones individuales de formato libre. Si desea ms informacin, consulte Reglas de precisin para operaciones numricas en la pgina 358. M indica que se utilizan las reglas de precisin por omisin. R indica que se calcular la precisin de un intermedio decimal, de modo que el nmero de posiciones decimales nunca sea inferior al nmero de posiciones decimales del resultado de la asignacin. E indica que los errores relacionados con las operaciones se comprobarn con la funcin incorporada %ERROR.
284
operandos separados por dos puntos. Consulte el Captulo 25. Cdigos de operacin en la pgina 367 para obtener las reglas de campo de resultado para los cdigos de operacin individuales.
Las posiciones 64 a 68 especifican la longitud del campo de resultado. Esta entrada es optativa, pero puede utilizarse para definir un campo numrico o de caracteres no definido en otro lugar del programa. Estas definiciones de las entradas de campo se permiten si el campo de resultado contiene un nombre de campo. Deben definirse otros tipos de datos en la especificacin de definicin o en la especificacin de clculo utilizando la operacin *LIKE DEFINE. La entrada especifica el nmero de posiciones que se han de reservar para el campo de resultado. La entrada debe estar ajustada por la derecha. Debe especificarse la longitud no empaquetada (nmero de dgitos) para los campos numricos. Si se define el campo de resultado en otro lugar del programa, no se requiere una entrada para la longitud. Sin embargo, si se especifica la longitud y si se define el campo de resultado en otro lugar del programa, la longitud debe ser igual a la longitud definida anteriormente. Si la longitud del campo de resultado es diferente de la longitud definida anteriormente, se utiliza el valor definido anteriormente.
Las posiciones 69-70 indican el nmero de posiciones a la derecha del decimal de un campo de resultado numrico.
285
operacin especificado. Consulte los cdigos de operacin individuales en el Captulo 25. Cdigos de operacin en la pgina 367 para obtener una descripcin de los indicadores resultantes asociados. En las operaciones aritmticas, el campo de resultado slo se comprueba despus de que se haya truncado el campo y efectuado el redondeo (si se especifica). Se establecen los indicadores dependiendo de los resultados de las pruebas especificadas. Entrada Explicacin Blanco No se especifica un indicador resultante 01-99 LR Indicadores generales Indicador de ltimo registro
Los indicadores resultantes no pueden utilizarse cuando el campo de resultado utiliza una matriz no indexada. Si se utiliza el mismo indicador como indicador resultante en ms de una especificacin de clculo, la especificacin procesada ms recientemente determina el estado de dicho indicador. Nota: Cuando se lleva a cabo la operacin de clculo, los indicadores resultantes especificados se desactivan y si se satisface una condicin especificada por un indicador resultante, se activa dicho indicador.
Ampliador de operacin
Entrada Explicacin
286
Blanco No se ha suministrado una extensin de operacin H M R E Resultado redondeado de la operacin numrica Reglas de precisin por omisin Reglas de precisin de Posicin decimal de resultado Manejo de errores
Se puede especificar redondeo, utilizando el ampliador H, en las operaciones aritmticas EVAL y RETURN. Se puede especificar el tipo de precisin, utilizando el ampliador M o R, en operaciones DOU, DOW, EVAL, IF, RETURN y WHEN. Se puede especificar manejo de errores, utilizando el amplidor E.
287
288
v Descripcin y control de campo (posiciones 21 a 80). Cada campo est descrito en una lnea independiente, debajo de su entrada de identificacin de registro correspondiente.
289
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 O..............N01N02N03Field+++++++++YB.End++PConstant/editword/DTformat++Comment+++++++++++++ O..............................................Constant/editword-ContinutioComment+++++++++++++
Descrito externamente
En los archivos descritos externamente, las entradas de las especificaciones de salida se dividen en las categoras siguientes: v Identificacin y control de registro (posiciones de la 7 a la 39)
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 ORcdname+++E...N01N02N03Excnam++++.........................................Comment+++++++++++++ ORcdname+++EAddN01N02N03Excnam++++.........................................Comment+++++++++++++ O.........And..N01N02N03Excnam++++.........................................Comment+++++++++++++
290
Para los archivos especificados como de salida, de actualizacin, combinado o de entrada con ADD, se requiere como mnimo una especificacin de salida, a menos que en los clculos se utilice un cdigo de operacin de archivo explcito con un nombre de estructura de datos especificado en el campo de resultado. Por ejemplo, una operacin WRITE no requiere especificaciones de salida.
DEL
291
Los indicadores de salida no son necesarios en las lneas de salida. Si no se especifican indicadores de condicin, se efecta una salida de la lnea cada vez que se lleva a cabo una comprobacin de salidas del registro. Pueden entrarse un mximo de tres indicadores en una lnea de especificacin para controlar cundo se graba un registro o un campo determinado en un registro. Los indicadores que condicionan la salida se codifican en las posiciones 22 y 23, 25 y 26 y 28 y 29. Cuando se entra una N en las posiciones 21, 24 27, el indicador de la posicin asociada debe estar desactivado para la lnea o campo que se ha de grabar. De lo contrario, debe estar activado el indicador para la lnea o campo que se ha de grabar. Consulte PAGE, PAGE1-PAGE7 en la pgina 295 para obtener ms informacin sobre cmo los indicadores afectan los campos PAGE. Si se especifica ms de un indicador en una lnea, se considera que todos los indicadores estn en una relacin AND. Si en una relacin AND el registro de salida debe condicionarse mediante ms de tres indicadores, entre las letras AND en las posiciones 16 a 18 de la lnea siguiente y especifique los indicadores adicionales en las posiciones 21 a 29 de dicha lnea. Las posiciones 40 a 51 (espacio y saltar) deben estar en blanco para todas las lneas AND. Si el registro de salida se ha de grabar cuando existen una de dos o ms series de condiciones (una relacin OR), entre las letras OR en las posiciones 16-18 de la lnea de especificacin siguiente y especifique los indicadores OR adicionales en dicha lnea. Cuando se especifica una lnea OR para un archivo de impresora, las entradas de saltar y espacio (posiciones 40 a 51) pueden estar todas en blanco, por lo que en este caso se utilizan las entradas de espacio y saltar de la lnea anterior. Si difieren de las de la lnea anterior, entre las entradas de espacio y saltar en la lnea OR.
292
fin. En el grfico siguiente, se libera el bloqueo de registro del archivo RCDA mediante la operacin EXCEPT.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. C* C KEY CHAIN RCDA C EXCEPT RELESE ORcdname+++D...N01N02N03Excnam++++....................................... O O* ORCDA E RELESE O* (sin campos)
293
1-255
Valores de espaciado
294
PAGE, PAGE1-PAGE7
Para utilizacin la numeracin automtica de pginas, entre PAGE en las posiciones 30 a 43 como el nombre del campo de salida. Los indicadores especificados en las posiciones 21 a 29 condicionan el restablecimiento del campo PAGE, no si se imprime o no. El campo PAGE se incrementa siempre en 1 y se imprime. Si se cumplen los indicadores de condicin, se restablece en cero antes de incrementarlo en 1 e imprimirlo. Si se necesitan nmeros de pgina para varios archivos de salida (o para numeracin diferente en un archivo), pueden utilizarse PAGE1 a PAGE7. En los campos PAGE se efecta automticamente una supresin de ceros mediante el cdigo de edicin Z. Para obtener ms informacin sobre palabras reservadas PAGE, consulte Palabras con funciones especiales y palabras reservadas en la pgina 4.
*PLACE
*PLACE se utiliza para repetir datos en un registro de salida. Los campos o constantes que se han especificado en lneas de especificacin anteriores pueden repetirse en el registro de salida sin que se nombren el campo y las posiciones finales en una nueva lnea de especificacin. Cuando se entra *PLACE en las posiciones 30 a 43, se repiten todos los datos contenidos entre la primera posicin y la posicin final ms alta especificada anteriormente para un campo de dicho registro de salida hasta que se alcanza la posicin final del registro de salida en la lnea de especificacin *PLACE. La posicin final especificada en la lnea de especificacin *PLACE debe ser como mnimo el doble de la posicin final del grupo de campos que se ha de duplicar. Puede utilizarse *PLACE con cualquier tipo de salida. Con *PLACE no se puede utilizar blanco despus (posicin 45), edicin (posiciones 44, 53 a 80), formato de datos (posicin 52) y las posiciones finales relativas.
295
informacin sobre palabras reservadas de fecha de usuario, consulte Palabras especiales de fecha de usuario en la pgina 7.
La posicin 44 se utiliza para especificar cdigos de edicin que suprimen los ceros iniciales en un campo numrico o para puntuar un campo numrico sin utilizar una palabra de edicin. Las entradas permitidas son 1 a 4, A a D, J a Q, X, Y, Z y blanco.
La posicin 45 se utiliza para restablecer un campo numrico en ceros o un campo de tipo carcter, grfico o UCS-2 en blancos. Los campos de fecha, hora e indicacin de la hora se restablecen con sus valores por omisin. Si el campo est condicionado mediante indicadores en las posiciones 21 a 29, tambin se condiciona el blanco despus. Si se especifica blanco despus (posicin 45) para un campo que se ha de grabar ms de una vez, debe entrarse la B en la ltima lnea que especifique la salida para dicho campo, o de lo contrario el campo nombrado se imprimir como el valor blanco despus para todas las lneas despus de la que est efectuando blanco despus.
296
Las entradas vlidas para las posiciones finales son blancos, +nnnn, nnnn y nnnnn. Todas las entradas en estas posiciones deben finalizar en la posicin 51. Entre la posicin del carcter situado ms a la derecha del campo o constante. La posicin final no debe sobrepasar la longitud de registro para el archivo. Si se ha grabar toda una matriz, entre la posicin final del ltimo elemento de la matriz en las posiciones 47 a 51. Si se ha de editar la matriz, asegrese de que al especificar la posicin final haya posiciones suficientes para grabar todos los elementos editados. Cada elemento se edita segn el cdigo de edicin o palabra de edicin. La entrada +nnnn o nnnn especifica la ubicacin del campo o constante en relacin con la posicin final del campo anterior. El nmero (nnnn) debe estar ajustado por la derecha, pero no se requieren ceros iniciales. Entre el signo en cualquier lugar a la izquierda del nmero dentro del campo de entrada. Para calcular la posicin final, utilice estas frmulas:
posicin final = longitud de campo +nnnn + posicin final anterior posicin final = longitud de campo nnnn + posicin final anterior
Para la primera especificacin de campo del registro, la posicin final anterior es igual a cero. La longitud de campo es la longitud del campo despus de editarlo, o la longitud de la constante indicada en esta especificacin. La utilizacin de +nnnn es equivalente a colocar nnnn posiciones entre los campos. -nnnn hace que se solapen los campos en nnnn posiciones. Por ejemplo, si la posicin final anterior es 6, el nmero de posiciones que se ha colocar entre los campos (nnnn) es 5 y la longitud de campo es 10, la posicin final ser igual a 21. Cuando se utiliza *PLACE, debe especificarse una posicin final real; no puede ser un blanco o un desplazamiento. Una entrada de blanco se trata como una entrada de +0000. No hay posiciones que separen los campos
297
El campo de tipo UCS-2 debe grabarse en formato de longitud fija o variable, dependiendo de la ausencia o la presencia del atributo de datos *VAR. Slo es vlido para campos de grficos en archivos descritos por programa. El campo grfico se grabar en formato de longitud fija o variable, dependiendo de la ausencia o la presencia del atributo de datos *VAR. El campo numrico se debe grabar en formato binario. El campo numrico se grabar en formato flotante El campo numrico se debe grabar en formato de entero. El campo numrico se debe grabar precedido (izquierda) de un signo ms o de un signo menos en formato decimal con zona. El campo numrico se debe grabar en formato decimal empaquetado. A continuacin del campo numrico (derecha) se debe incluir un signo ms o un signo menos en formato decimal con zona. El campo numrico se debe grabar en formato decimal con zona. El campo numrico se debe grabar en formato de entero sin signo. Campo de fecha el campo de fecha se convierte al formato especificado en las posiciones 53-80 o al formato de fecha de archivo por omisin. Campo de hora el campo de hora se convierte al formato especificado en las posiciones 53-80 o al formato de hora de archivo por omisin. Slo es vlido para campos de indicacin de la hora
B F I L P R S U D T Z
La entrada en la posicin 52 especifica el formato externo de los datos de los registros del archivo. Esta entrada no afecta al formato utilizado para el proceso interno en el campo de salida del programa. Para campos numricos, el nmero de bytes necesarios para el registro de salida depende de este formato. Por ejemplo, un campo numrico con 5 dgitos requiere: v 5 bytes al grabarlo en formato con zona v 3 bytes al grabarlo en formato empaquetado v 6 bytes al grabarlo en formato L o R v 4 bytes al grabarlo en formato binario v 2 bytes al grabarlo en formato I o U. Puede causar un error en el tiempo de ejecucin si el valor es superior al valor mximo para un campo de entero de 2 bytes o sin signo. Para el caso de campos de 5 dgitos, quiz el formato binario resulte ms adecuado. Los campos numricos flotantes escritos con la entrada de Formato de datos en blanco ocupan 14 23 posiciones (para los campos flotantes de 4 y de 8 bytes respectivamente) en el registro de salida. Nota: Debe especificarse una G o un blanco en un campo de grficos de un archivo descrito por programa.
298
Constantes
Las constantes contienen de datos de caracteres (literales) que no cambian de un proceso del programa al siguiente. Una constante son los datos reales utilizados en el registro de salida en lugar de un nombre que representa la ubicacin de los datos. Una constante puede situarse en las posiciones 53 a 80. La constante debe comenzar en la posicin 54 (apstrofo en la posicin 53) y debe finalizar con un apstrofo incluso si contiene slo caracteres numricos. Los apstrofos utilizados dentro de la constante deben entrarse dos veces; sin embargo, cuando se graba la constante slo aparece un apstrofo. El nombre de campo (posiciones 30 a 43) debe estar en blanco. Las constantes se pueden continuar. (Consulte el apartado Reglas de continuacin en la pgina 195 para obtener informacin acerca de las reglas de continuacin.) En lugar de entrar una constante, puede utilizar una constante con nombre. No se permiten los literales de tipo grfico y UCS-2 o las constantes con nombre como palabras de edicin, aunque pueden especificarse como constantes.
Palabra de edicin
Una palabra de edicin especifica la puntuacin de los campos numricos, incluida la impresin de signos de dlar, comas, puntos y estado de signo. Consulte el apartado Partes de una palabra de edicin en la pgina 180 para obtener detalles. Las palabras de edicin deben ser literales de caracteres o constantes con nombre. No estn permitidos los literales de tipo grfico, UCS-2 o hexadecimal ni las constantes con nombre.
Atributos de datos
Los atributos de datos especifican el formato externo para una fecha, una hora o un campo de tipo carcter, grfico o UCS-2 de longitud variable. Si no se especifica ningn formato de fecha u hora para los datos de fecha y hora, se utiliza el formato/separador especificado para el archivo (con DATFMT o TIMFMT o ambos). Si no se ha especificado ningn formato externo de fecha o de hora para el archivo, se emite un mensaje de error. Consulte los apartados DATFMT(fmt{separador}) en la pgina 205 y TIMFMT(fmt{separador}) en la pgina 212 para obtener informacin sobre los formatos de fecha y hora. La jerarqua utilizada para determinar el formato externo y el separador de campos de fecha y hora proviene de: 1. El formato de fecha y el separador especificado en las posiciones 53-58 (o 53-57). 2. A partir de la palabra clave DATFMT/TIMFMT especificada para el archivo actual 3. A partir de la palabra clave DATFMT/TIMFMT especificada en la especificacin de control 4. *ISO Los campos de fecha y hora se convierten del formato de fecha/hora interno al formato externo determinado anteriormente. En los datos de tipo carcter, grfico y UCS-2, se utiliza el atributo de datos *VAR para especificar campos de salida de longitud variable. Si esta entrada est en
Captulo 21. Especificaciones de salida
299
blanco para los datos de tipo carcter, grfico y UCS-2, el formato externo tendr una longitud fija. Para obtener ms informacin sobre los campos de longitud variable, consulte el apartado Formato carcter, grfico y UCS-2 de longitud variable en la pgina 105. Nota: El nmero de bytes ocupados en el registro de salida depende del formato especificado. Por ejemplo, una fecha escrita en formato *MDY ocupa 8 bytes, pero una fecha escrita en formato *ISO requiere 10 bytes. Para obtener ms informacin acerca de los formatos externos, vea Formatos internos y externos en la pgina 95.
Consulte el apartado Posiciones 16-18 (Relacin lgica) en la pgina 291 si desea ms informacin.
Posicin 17 (Tipo)
Entrada Explicacin E Registros de excepcin.
300
Consulte el apartado Posicin 17 (Tipo - Archivo descrito por programa) en la pgina 291 si desea ms informacin.
*ALL
En los archivos descritos externamente, slo los campos especificados se colocan en el registro de salida. Puede especificarse *ALL para incluir todos los campos del registro. Si se especifica *ALL, no pueden especificarse otras lneas de descripcin de campo para dicho registro. Sobretodo, no puede especificar una B (blanco despus) en la posicin 45.
301
En un registro de actualizacin, slo los campos especificados en las especificaciones de campo de salida que renan las condiciones especificadas por los indicadores de salida se colocan en el registro de salida para volverlos a grabar. Los valores que se han ledo se utilizan para volver a grabar todos los dems campos. Para la creacin de un nuevo registro (ADD especificado en las posiciones 18-20), los campos especificados se colocan en el registro de salida. Los campos no especificados o que no renan las condiciones especificadas por los indicadores de salida se graban como ceros o blancos, dependiendo del formato de datos especificado en la descripcin externa.
La posicin 45 se utiliza para restablecer un campo numrico en ceros o un campo de tipo carcter, grfico o UCS-2 en blancos. Los campos de fecha, hora e indicacin de la hora se restablecen con sus valores por omisin. Si el campo est condicionado mediante indicadores en las posiciones 21 a 29, tambin se condiciona el blanco despus. Esta posicin debe estar en blanco para palabras reservadas de fecha de usuario de consulta anticipada, *PLACE, constantes con nombre y literales. Si se especifica blanco despus (posicin 45) para un campo que se ha de grabar ms de una vez, debe entrarse la B en la ltima lnea que especifique la salida para dicho campo, o de lo contrario el campo nombrado se imprimir como el valor blanco despus para todas las lneas despus de la que est efectuando blanco despus.
302
303
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 PName+++++++++++..B...................Keywords+++++++++++++++++++++++++++++Comments++++++++++++
304
B E
La especificacin marca el inicio del subprocedimiento que se est definiendo. La especificacin marca el fin del subprocedimiento que se est definiendo.
Una codificacin de subprocedimiento consta como mnimo de una especificacin de inicio de procedimiento y de una especificacin de fin de procedimiento. Cualquier parmetro y valor de retorno, as como otras definiciones y clculos del subprocedimiento se especifican entre las especificaciones del procedimiento.
EXPORT
La especificacin de la palabra clave EXPORT permite exportar el procedimiento de una DLL NOMAIN. El nombre situado en las posiciones 7-21 se exporta en formato de maysculas. Si no se ha especificado la palabra clave EXPORT, nicamente se puede llamar al procedimiento desde el mdulo.
305
306
307
308
Los argumentos de la funcin pueden ser variables, constantes, expresiones, un procedimiento con prototipo u otras funciones incorporadas. Un argumento expresin puede incluir una funcin incorporada. En el ejemplo siguiente se ilustra este caso.
CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C* C* En este ejemplo se muestra una expresin compleja con varias C* funciones incorporadas anidadas. C* C* %TRIM toma como argumento una serie. En este ejemplo, el C* argumento es la concatenacin de la serie A y la serie C* devuelta por la funcin incorporada %SUBST. Esta funcin devolver C* una subserie de la serie B empezando por la posicin 11 que C* tendr la longitud devuelta por %SIZE menos 20. %SIZE devolver C* la longitud de la serie B. C* C* Si A es la serie " Toronto," y B es la serie C* ' Ontario, Canad ' el argumento de %TRIM C* ser " Toronto, Canad " y RES tendr el valor C* "Toronto, Canad". C* C EVAL RES = %TRIM(A + %SUBST(B:11:%SIZE(B) - 20))
Consulte las descripciones de cada funcin incorporada para obtener informacin ms detallada sobre los argumentos que estn permitidos. A diferencia de los cdigos de operacin, las funciones no colocan un valor en un campo de resultado, sino que devuelven ese valor. En el ejemplo siguientes se ilustra esta diferencia.
309
CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* En el ejemplo siguiente, CITY contiene la serie C* "Toronto, Ontario". Se utiliza la operacin SCAN para localizar C* el espacio en blanco de separacin, que est en la posicin 9 en C* este ejemplo. SUBST coloca la serie "Ontario" en el campo TCNTRE. C* C* A continuacin, TCNTRE se compara con el literal "Ontario" y C* se suma 1 a CITYCNT. C* C ' ' SCAN CITY C C ADD 1 C C SUBST CITY:C TCNTRE C 'Ontario' IFEQ TCNTRE C ADD 1 CITYCNT C ENDIF C* C* En este ejemplo, CITY contiene el mismo valor, pero la variable C* TCNTRE no es necesaria, ya que la funcin incorporada %SUBST C* devuelve el valor adecuado. Adems, el paso intermedio C* de la suma de 1 a C se simplifica, ya que %SUBST acepta C* expresiones como argumentos. C* C ' ' SCAN CITY C C IF %SUBST(CITY:C+1) = 'Ontario' C EVAL CITYCNT = CITYCNT+1 C ENDIF
Observe que los argumentos utilizados en este ejemplo (la variable CITY y la expresin C+1) se corresponden con los valores de los factores de la operacin SUBST. El valor de retorno de la funcin tambin se corresponde con el resultado. Por lo general, los argumentos de las funciones incorporadas son similares a los campos de los factores 1 y 2 de los cdigos de operacin. Otra caracterstica de inters de las funciones incorporadas es que simplifican el mantenimiento del cdigo cuando se utiliza en la especificacin de definicin. En el ejemplo siguiente se ilustra esta caracterstica.
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D* D* en este ejemplo, CUSTNAME es un campo de la D* estructura de datos descrita externamente CUSTOMER. D* Si se cambia la longitud de CUSTNAME, los atributos de D* TEMPNAME y NAMEARRAY se cambiarn al volver a D* compilar. La utilizacin de la funcin incorporada %SIZE significa D* que no es necesario realizar modificaciones en el cdigo. D* D CUSTOMER E DS D DS D TEMPNAME LIKE(CUSTNAME) D NAMEARRAY 1 OVERLAY(TEMPNAME) D DIM(%SIZE(TEMPNAME))
Las funciones incorporadas se pueden utilizar en expresiones en la especificacin de clculo del factor 2 ampliado y con palabras clave en la especificacin de definicin. Cuando se utilizan con palabras clave de especificacin de definicin, el valor de las funciones incorporadas debe saberse en el momento de realizar la compilacin, y el argumento no puede ser una expresin.
310
En la tabla siguiente se facilita una lista de las funciones incorporadas, sus argumentos y el valor que devuelven.
Nombre de funcin incorporada %ABS %ADDR %CHAR Argumento(s) expresin numrica nombre de variable Valor devuelto valor absoluto de la expresin direccin de variable
expresin grfica, de fecha, valor con el tipo de datos de hora o de indicacin de la carcter hora expresin numrica{:dgitos:decpos} expresin numrica:dgitos:decpos} expresin numrica dividendo: divisor valor en formato numrico empaquetado valor redondeado en formato numrico empaquetado nmero de dgitos decimales el cociente de la divisin de los dos argumentos
expresin numrica no serie que representa el valor editado flotante:cdigo edicin{:*CURSYM|*ASTFILL| smbolo de moneda} expresin numrica representacin de visualizacin externa de caracteres flotantes serie que representa el valor editado nmero de elementos o apariciones 1 si la operacin de entrada de archivo o la grabacin en un subarchivo (para un archivo en concreto, si se especifica) ms reciente ha finalizado con una condicin de fin de archivo o principio de archivo 0 en caso contrario
%EDITFLT
%EDITW %ELEM
expresin numrica no flotante:palabra edicin nombre de matriz, tabla o estructura de datos de mltiples apariciones {archivo}
%EOF
%EQUAL
{archivo}
1 si la operacin SETLL (para un archivo en concreto, si se especifica) o LOOKUP ms reciente ha encontrado una coincidencia exacta 0 en caso contrario
%ERROR
1 si el cdigo de operacin ms reciente con el ampliador E especificado ha dado como resultado un error. 0 en caso contrario
%FLOAT
expresin numrica
311
Argumento(s) {archivo}
Valor devuelto 1 si la operacin pertinente (para un archivo en concreto, si se especifica) ms reciente ha encontrado un registro (CHAIN, DELETE, SETGT, SETLL), un elemento (LOOKUP) o una coincidencia (CHECK, CHECKR y SCAN) 0 en caso contrario
%GETATR
nombre de ventana, de componente, de atributo, %PART, %WINDOW carcter, grfico o expresin UCS-2 expresin numrica expresin numrica cualquier expresin nombre de campo con posibilidad de nulos
valor de atributo
valor en formato grfico valor en formato de entero valor redondeado en formato de entero longitud en dgitos o caracteres valor con formato indicador que representa el valor de indicador nulo del campo con posibilidad de nulos 1 si el archivo especificado est abierto 0 si el archivo especificado est cerrado
%OPEN
nombre de archivo
serie de sustitucin: serie del serie obtenida al insertar la serie de sustitucin en la fuente{:posicin inicial {:longitud del fuente a serie del fuente, empezando sustituir}} por la posicin inicial y sustituyendo el nmero especificado de caracteres. argumento de bsqueda:serie primera posicin del a buscar{:posicin inicial} argumento de bsqueda en la serie o cero si no se encuentra. nombre de ventana, de componente, de atributo, %PART, %WINDOW variable, matriz o literal{:*ALL} ninguno
%SCAN
%SETATR
%SIZE
312
Argumento(s) {archivo}
Valor devuelto 0 si no se ha producido ningn error de programa ni de archivo desde el cdigo de operacin ms reciente con el ampliador E especificado el valor ms reciente establecido para cualquier estado de archivo o programa, si se ha producido un error si se ha especificado un archivo, el valor devuelto es el estado ms reciente de dicho archivo
%STR
puntero{:longitud mxima}
caracteres direccionados por argumento de puntero hasta el primer x00, exclusive subserie serie con blancos truncados por la derecha y por la izquierda serie con blancos truncados por la izquierda serie con blancos truncados por la derecha valor en formato UCS-2 valor en formato sin signo valor redondeado en formato sin signo suma de los elementos
%SUBST %TRIM
serie:inicio{:longitud} serie
serie serie carcter o expresin grfica expresin numrica expresin numrica expresin de matriz
Para obtener ms informacin acerca de la utilizacin de las funciones incorporadas, consulte: v Captulo 18. Especificaciones de definicin en la pgina 227 v Sentencia de especificacin del Clculo del factor 2 ampliado en la pgina 286 v Operaciones que utilizan expresiones en la pgina 380 v DOU (Hacer hasta) en la pgina 435 v DOW (Hacer mientras) en la pgina 438 v EVAL (Evaluar expresin) en la pgina 446 v IF (Si) en la pgina 457 v RETURN (Volver al llamador) en la pgina 525 v WHEN (Seleccionar cuando sea verdadero) en la pgina 558
313
%ABS devuelve el valor absoluto de la expresin numrica especificada como parmetro. Si el valor de la expresin numrica es no negativo, el valor se devuelve sin ningn cambio. Si el valor es negativo, se devuelve el valor de la expresin, pero sin el signo negativo. %ABS se puede utilizar en expresiones o como parmetros para palabras clave. Cuando se utiliza con palabras clave, el operando debe ser un literal numrico, un nombre de constante que represente un valor numrico o una funcin incorporada con un valor numrico conocido en el tiempo de compilacin.
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++ D f8 D i10 D p7 s s s 8f inz (-1) 10i 0 inz (-123) 7p 3 inz (-1234.567)
CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++ C C C eval eval eval f8 = %abs (f8) i10 = %abs (i10 - 321) p7 = %abs (p7)
C* El valor de "f8" ahora es 1. C* El valor de "i10" ahora es 444. C* El valor de "p7" ahora es 1234.567.
%ADDR devuelve un valor de tipo puntero base. Este valor es la direccin de la variable especificada. Slo se puede comparar con y asignar a elementos de tipo puntero base. Si se especifica %ADDR con un parmetro de ndice de matriz en las palabras clave INZ o CONST de especificacin de definicin, el ndice de matriz debe conocerse en la compilacin. El ndice debe ser un literal o una constante numricos. En una operacin EVAL en la que el resultado de la asignacin es una matriz sin ndice, %ADDR situada en la parte derecha del operador de asignacin tiene un significado diferente segn el argumento que tenga. Si el argumento de %ADDR es un nombre de matriz sin ndice y el resultado es un nombre de matriz, cada elemento de la matriz resultante contiene la direccin del principio del argumento matriz. Si el argumento de %ADDR es un nombre de matriz cuyo ndice es (*), cada elemento de la matriz resultante contendr la direccin del elemento correspondientes en el argumento matriz. Esto se ilustra en la Figura 112 en la pgina 315.
314
Si la variable especificada como parmetro es una tabla, una estructura de datos de mltiples apariciones o un subcampo de una estructura de datos de mltiples apariciones, la direccin es la del ndice actual de la tabla o del nmero de aparicin. Si la variable est basada, %ADDR devuelve el valor del puntero base de la variable. Si la variable es un subcampo de una estructura de datos basada, el valor de %ADDR es el valor del puntero base ms el desplazamiento del subcampo. Si la variable se especifica como parmetro (PARM) de *ENTRY PLIST, %ADDR devuelve la direccin que el llamador ha pasado al programa.
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D* D* El conjunto siguiente de definiciones es vlido, ya que el ndice D* de la matriz tiene un valor de tiempo de compilacin D* D ARRAY S 20A DIM (100) D* Establece el puntero en la direccin del sptimo elemento de la matriz. D PTR S * INZ (%ADDR(ARRAY(SEVEN))) D SEVEN C CONST (7) D* D DS1 DS OCCURS (100) D 20A D SUBF 10A D 30A D CHAR10 S 10A BASED (P) D PARRAY S * DIM(100)
315
CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C* C 23 OCCUR DS1 C EVAL SUBF = *ALL'abcd' C EVAL P = %ADDR (SUBF) C C IF CHAR10 = SUBF C* Esta condicin se cumple C ENDIF C C IF %ADDR (CHAR10) = %ADDR (SUBF) C* Esta condicin tambin se cumple C ENDIF C C* La sentencia siguiente tambin cambia el valor de SUBF C EVAL CHAR10 = *ALL'efgh' C C IF CHAR10 = SUBF C* Esta condicin tambin se cumple C ENDIF *-------------------------------------------------------------C 24 OCCUR DS1 C IF CHAR10 = SUBF C* Esta condicin ya no se cumple C ENDIF *-------------------------------------------------------------C* La direccin de un elemento de matriz se toma utilizando una C* expresin como ndice de la matriz C* C EVAL P = %ADDR (ARRAY (X + 10)) *-------------------------------------------------------------C* Cada elemento de la matriz PARRAY contiene la direccin del C* primer elemento de la matriz ARRAY. C EVAL PARRAY = %ADDR(ARRAY) C* Cada elemento de la matriz PARRAY contiene la direccin del C* elemento correspondiente de la matriz ARRAY C EVAL PARRAY = %ADDR(ARRAY(*))
%CHAR convierte el valor de la expresin de datos grficos, UCS-2, numricos, de fecha, de hora o de indicacin de la hora a tipo carcter. El valor convertido no sufre cambio alguno, pero es devuelto en un formato compatible con los datos de tipo carcter. Si el parmetro es una constante, la conversin se efectuar en tiempo de compilacin. Si una conversin de UCS-2 provoca caracteres de sustitucin, en el listado del compilador aparecer un mensaje de aviso si el parmetro es una constante. De lo contrario, en tiempo de ejecucin se establecer el estado 00050 pero no se dar ningn mensaje de error. En el caso de los datos grficos, el valor devuelto es dos bytes para cada campo grfico. Por ejemplo, si se convierte un campo grfico de 5 caracteres, el valor
316
devuelto es 10 caracteres (10 bytes de datos grficos). Si el valor de la expresin tiene una longitud variable, el valor devuelto tiene el formato variable. Para datos de fecha, de hora o de indicacin de la hora, el valor devuelto incluye los caracteres de separador. El formato y los separadores del resultado son los mismos que el del parmetro.
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D ChineseName S 20G VARYING INZ(G'XXYYZZ') D date S D INZ(D'1997/02/03') D time S T INZ(T'12:23:34') D result S 100A VARYING CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C C EVAL result = 'It is ' + %CHAR(time) + ' on ' + %CHAR(date)
C* result = 'It is 12:23:34 on 1997/02/03' C* C EVAL result = 'The time is now ' C + %SUBST(%CHAR(time):1:5) + '.' C* result = 'The time is now 12:23.' C* C EVAL result = 'The customer''s name is ' C + %CHAR(ChineseName) + '.' C* result = 'The customer's name is XXYYZZ.'
%DEC convierte el valor de la expresin numrica a formato decimal (empaquetado) con dgitos de precisin y posiciones decimales. La precisin y las posiciones decimales deben ser literales numricos, constantes con nombre que representen literales numricos o funciones incorporadas con un valor numrico, que debe conocerse en el momento de realizar la compilacin. Los parmetros de posicin y las posiciones decimales se pueden omitir si el tipo de expresin numrica es no flotante. Si se omiten estos parmetros, la precisin y las posiciones decimales se toman de los atributos de la expresin numrica.
317
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++ D D D D D D p7 s9 f8 result1 result2 result3 s s s s s s 7p 9s 8f 15p 15p 15p 3 inz (1234.567) 5 inz (73.73442) inz (123.456789) 5 5 5
CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++ C C C eval eval eval result1 = %dec (p7) + 0.011 result2 = %dec (s9 : 5: 0) result3 = %dech (f8: 5: 2)
C* El valor de "result1" ahora es 1234.57800. C* El valor de "result2" ahora es 73.00000. C* El valor de "result3" ahora es 123.46000.
%DECH es igual a %DEC, excepto si la expresin numrica es un valor decimal o flotante, en cuyo caso se aplica el redondeo al valor de la expresin numrica al efectuar la conversin para la precisin deseada. Si no se puede llevar a cabo el redondeo, no se emite ningn mensaje. A diferencia de %DEC, son obligatorios los tres parmetros.
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++ D D D D D D p7 s9 f8 result1 result2 result3 s s s s s s 7p 9s 8f 15p 15p 15p 3 inz (1234.567) 5 inz (73.73442) inz (123.456789) 5 5 5
CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++ C C C eval eval eval result1 = %dec (p7) + 0.011 result2 = %dec (s9 : 5: 0) result3 = %dech (f8: 5: 2)
* El valor de "result1" ahora es 1234.57800. * El valor de "result2" ahora es 73.00000 * El valor de "result3" ahora es 123.46000.
318
%DECPOS devuelve el nmero de posiciones decimales de la expresin o variable numrica. El valor devuelto es una constante, por lo que puede participar en la acomodacin de constantes. La expresin numrica no debe ser una expresin ni una variable flotante.
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++ D D D D D p7 s9 result1 result2 result3 s s s s s 7p 9s 5i 5i 5i 3 inz (8236.567) 5 inz (23.73442) 0 0 0
CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++ C eval result1 = %decpos (p7) C eval result2 = %decpos (s9) C eval result3 = %decpos (p7 * s9) C* El valor de "result1" ahora es 3. C* El valor de "result2" ahora es 5. C* El valor de "result3" ahora es 8.
%DIV devuelve la porcin entera del cociente que es el resultado de dividir los operandos n por m. Los dos operandos deben ser valores numricos con cero posiciones decimales. Si alguno de los operandos es un valor numrico empaquetado, con zona o binario, el resultado es un valor numrico empaquetado. Si alguno de los operandos es un valor numrico entero, el resultado es un entero. De lo contrario, el resultado es un valor numrico sin signo. No se permiten operandos numricos de coma flotante. (Vase tambin %REM (Devolver resto entero) en la pgina 334.) Si los operandos son constantes que pueden caber en campos enteros o sin signo de 8 bytes, la funcin incorporada aplica la evaluacin de constantes en tiempo de compilacin. En este caso, es posible codificar la funcin incorporada %DIV en las especificaciones de definiciones. Esta funcin se ilustra en la Figura 139 en la pgina 335.
Esta funcin devuelve un resultado de tipo carcter que representa el valor numrico editado segn el cdigo de edicin. Por lo general, las reglas del valor numrico y del cdigo de edicin son idnticas a las de los valores numricos de edicin en las especificaciones de salida. El tercer parmetro es opcional y, si se especifica, debe ser uno de los siguientes: *ASTFILL Indica que se utilizar la proteccin de asterisco. De este modo, los ceros
319
iniciales se sustituyen por asteriscos en el valor devuelto. Por ejemplo, %EDITC(-0012.5 : K : *ASTFILL) devuelve **12.5. *CURSYM Indica que se utilizar un smbolo de moneda flotante. El smbolo real ser el que se haya especificado en la palabra clave CURSYM de la especificacin de control o, el valor por omisin, $. Si se especifica *CURSYM, el smbolo de moneda se sita en el resultado justo antes del primer dgito significativo. Por ejemplo, %EDITC(0012.5 : K : *CURSYM) devuelve $12.5 . smbolo de moneda Indica que se utilizar moneda flotante con el smbolo de moneda proporcionado. Debe ser una constante de tipo carcter de 1 byte (literal, constante con nombre o expresin que pueda evaluarse en tiempo de compilacin). Por ejemplo, %EDITC(0012.5 : K : X) devuelve X12.5 . El resultado de %EDITC tiene siempre la misma longitud, y puede contener blancos iniciales y de cola. Por ejemplo, %EDITC(NUM : A : $) puede devolver $1,234.56CR para un valor de NUM y $4.56 para otro valor. No se permiten expresiones flotantes en el primer parmetro (se puede utilizar %DEC para convertir una expresin flotante en un formato que se puede editar). El cdigo de edicin se especifica como una constante de tipo carcter; los cdigos de edicin para los que se ofrece soporte son los siguientes: A D, J Q, X Z, 1 9. La constante puede ser un literal, una constante con nombre o una expresin cuyo valor puede determinarse al efectuar la compilacin.
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D msg S 100A D salary S 9P 2 INZ(1000) * Si el valor de salary es 1000, el valor de salary * 12 * es 12000.00. La versin editada salary * 12 utilizando el * cdigo de edicin A con moneda flotante es ' $12,000.00 '. * El valor de msg es 'The annual salary is $12,000.00' CL0N01Factor1+++++++Opcode&ExtExtended-factor2+++++++++++++++++++++++++++ C EVAL msg = 'The annual salary is ' C + %trim(%editc(salary * 12 C :'A': *CURSYM)) * En el ejemplo siguiente, el valor de msg es 'The annual salary is &12,000.00' C EVAL msg = 'The annual salary is ' C + %trim(%editc(salary * 12 C :'A': '&')) * En el ejemplo siguiente, el valor de msg es 'Salary is $*****12,000.00' * '$' procede del texto, no del cdigo de edicin. C EVAL msg = 'Salary is $' C + %trim(%editc(salary * 12 C :'B': *ASTFILL)) C C * En el ejemplo siguiente, el valor de msg es 'The date is 1/14/1999' EVAL msg = 'The date is ' + %trim(%editc(*date : 'Y'))
Un requisito comn es editar un campo, tal y como se indica a continuacin: v Los ceros iniciales se suprimen v Se sitan parntesis en torno al valor si es negativo
320
*--------------------------------------------------------------* Subprocedimiento EDITPARENS *--------------------------------------------------------------P D D D D D editparens editparens val lparen rparen res B PI S S S 50A 30P 2 1A 1A 50A
C* Utiliza parntesis si el valor es negativo C C C C IF EVAL EVAL ENDIF val < 0 lparen = '(' rparen = ')'
C* Devolver el valor editado C* El cdigo de edicin '1' no incluye ningn signo, por lo que C* no es necesario calcular el valor absoluto. C C C P editparens E RETURN lparen + %editc(val : '1') + rparen
%EDITFLT convierte el valor de la expresin numrica para la representacin de la visualizacin externa de caracteres flotantes. El resultado son 14 23 caracteres. Si el argumento es un campo flotante de 4 bytes, el resultado son 14 caracteres. De lo contrario, son 23 caracteres. Si se especifica como un parmetro para una palabra clave de especificacin de definicin, el parmetro debe ser un literal numrico, un literal flotante o un nombre de constante de valor numrico o funcin incorporada. Cuando se
321
especifica en una expresin, la acomodacin de constantes se aplica si la expresin numrica tiene un valor constante.
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++ D f8 D string s s 8f 40a inz (50000)
CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++ C C eval string = 'Float value is ' + %editflt (f8 - 4e4) + '.'
Esta funcin devuelve un resultado de tipo carcter que representa el valor numrico editado segn la palabra de edicin. Las reglas del valor numrico y de la palabra de edicin son idnticas a las de los valores numricos de edicin en las especificaciones de salida. No se permiten expresiones flotantes en el primer parmetro. Se puede utilizar %DEC para convertir un formato flotante en un formato que se puede editar. La palabra de edicin debe ser una constante de tipo carcter.
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D amount D salary D editwd S S C 30A 9P 2
'$ ,
**Dollars&
&Cents;'
C* Si el valor de salary es 2451.53, la versin editada de C* (salary * 12) es '$***29,418*Dollars 36 Cents'. El valor de C* amount es 'The annual salary is $***29,418*Dollars 36 Cents'. CSRN01Factor1+++++++Opcode&ExtExtended-factor2+++++++++++++++++++++++++++ C C EVAL amount = 'The annual salary is ' + %editw(salary * 12 : editwd)
%ELEM devuelve el nmero de elementos de la matriz, tabla o estructura de datos de mltiples apariciones. Se puede especificar en cualquier posicin de las especificaciones de definicin en que se permita una constante numrica o en una expresin en el campo del factor 2 ampliado.
322
El parmetro debe ser el nombre de una matriz, de una tabla o de una estructura de datos de mltiples apariciones.
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D D arr1d S 20 DIM(10) D table S 10 DIM(20) ctdata D mds DS 20 occurs(30) D like_array S like(arr1d) dim(%elem(arr1d)) D array_dims C const (%elem (arr1d)) CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C C* En los ejemplos siguientes, num ser igual a 10, 20 y 30. C* C EVAL num = %elem (arr1d) C EVAL num = %elem (table) C EVAL num = %elem (mds)
%EOF devuelve 1 si la operacin de lectura o la grabacin en un subarchivo ms reciente ha finalizado con una condicin de fin de archivo o principio de archivo; en caso contrario, devuelve 0. Las operaciones que establecen %EOF son: v READ (Leer un registro) en la pgina 510 v READC (Leer siguiente registro modificado) en la pgina 513 v READE (Leer clave igual) en la pgina 514 v READP (Leer registro anterior) en la pgina 516 v READPE (Leer igual anterior) en la pgina 518 v WRITE (Crear nuevos registros) en la pgina 561 (subarchivo slo). Cuando se especifica un archivo controlado en clculo, esta funcin devuelve 1 si la operacin anterior de la lista que figura ms arriba, para el archivo especificado, ha dado como resultado una condicin de fin o principio de archivo. En el caso de archivos primarios y secundarios, %EOF est disponible slo si se especifica el nombre de archivo. Se establece en 1 si la operacin de entrada ms reciente en el transcurso del proceso *GETIN ha dado como resultado una condicin de fin o principio de archivo. En caso contrario, devuelve 0. Esta funcin est permitida para archivos de entrada, actualizacin y de direccin de registro, as como para archivos de pantalla que permitan la realizacin de operaciones WRITE en registros de subarchivos.
323
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... FFilename++IT.A.FRlen+......A.Device+.Keywords+++++++++++++++++++++++++++++ F* El formato de registro del archivo INFILE es INREC FINFILE IF E DISK CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* Leer un registro C READ INREC C* Si se ha alcanzado el fin de archivo ... C IF %EOF C ... C ENDIF
C WHEN %EOF(FILE1) AND %EOF(FILE2) C* Ambos archivos han llegado al final de archivo C EXSR EndCompare C WHEN %EOF(FILE1) C* FILE1 es ms pequeo que FILE2 C EXSR F1Short C WHEN %EOF(FILE2) C* FILE2 es ms pequeo que FILE1 C EXSR F2Short C OTHER C* Ambos archivos tienen registros que an no se han C* comparado C EXSR CompareRecs C ENDSL C ... ENDDO
324
%EQUAL devuelve 1 si la operacin pertinente ms reciente ha encontrado una coincidencia exacta; en caso contrario, devuelve 0. Las operaciones que establecen %EQUAL son: v SETLL (Establecer lmite inferior) en la pgina 534 v LOOKUP (Buscar un elemento en tabla o matriz) en la pgina 466 Si se utiliza %EQUAL sin el parmetro opcional de nombre de archivo, devuelve el valor establecido para la operacin apropiada ms reciente. Para la operacin SETLL, esta funcin devuelve 1 si existe un registro cuya clave o cuyo nmero relativo sea igual al argumento de bsqueda. Para la operacin LOOKUP con el indicador EQ especificado, esta funcin devuelve 1 si se encuentra un elemento que coincida exactamente con el argumento de bsqueda. Si se especifica un nombre de archivo, esta funcin se aplica a la operacin SETLL ms reciente para el archivo especificado. Esta funcin est permitida slo para aquellos archivos que permiten el cdigo de operacin SETLL.
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... FFilename++IT.A.FRlen+......A.Device+.Keywords+++++++++++++++++++++++++++++ F* El formato de registro del archivo CUSTS es CUSTREC FCUSTS IF E K DISK CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* Comprobar si el archivo contiene un registro con una clave C* Cust coincidente C Cust SETLL CUSTREC C IF %EQUAL C ... se ha encontrado una coincidencia exacta en el archivo C ENDIF
%FLOAT convierte el valor de la expresin numrica en formato flotante. Esta funcin incorporada nicamente se puede utilizar en expresiones.
325
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++ D D D D D p1 p2 result1 result2 result3 s s s s s 15p 0 inz (1) 25p13 inz (3) 15p 5 15p 5 15p 5
CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++ C C C eval eval eval result1 = p1 / p2 result2 = %float (p1) / p2 result3 = %float (p1 / p2)
C* El valor de "result1" ahora es 0.33000. C* El valor de "result2" ahora es 0.33333. C* El valor de "result3" ahora es 0.33333.
%FOUND devuelve 1 si la operacin de archivo apropiada ms reciente ha encontrado un registro, si una operacin de serie ha encontrado una coincidencia o si una operacin de bsqueda ha encontrado un elemento. En caso contrario, esta funcin devuelve 0. Si se utiliza %FOUND sin el parmetro opcional de nombre de archivo, devuelve el valor establecido para la operacin apropiada ms reciente. Si se especifica un nombre de archivo, se aplica a la operacin apropiada ms reciente sobre dicho archivo. Para las operaciones de archivo, %FOUND es funcionalmente lo contrario del indicador NR (no se ha encontrado ningn registro). Para las operaciones de serie, %FOUND es funcionalmente lo mismo que el indicador FD (encontrado). En el caso de la operacin LOOKUP, %FOUND devuelve 1 si la operacin encuentra un elemento que cumpla las condiciones de bsqueda.
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... FFilename++IT.A.FRlen+......A.Device+.Keywords+++++++++++++++++++++++++++++ F* El formato de registro del archivo CUSTS es CUSTREC FCUSTS IF E K DISK CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* Comprobar si el cliente figura en el archivo C Cust CHAIN CUSTREC C IF %FOUND C ... C ENDIF
Figura 127. %FOUND utilizado para probar una operacin de archivo sin ningn parmetro
326
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... FFilename++IT.A.FRlen+......A.Device+.Keywords+++++++++++++++++++++++++++++ F* El archivo MASTER contiene todos los clientes F* El archivo GOLD contiene slo los clientes "preferentes" FMASTER IF E K DISK FGOLD IF E K DISK CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* Comprobar si existe el cliente, pero no es preferente C Cust CHAIN MASTREC C Cust CHAIN GOLDREC C* Observe que se utiliza el nombre de archivo para %FOUND y no el C* nombre de registro C IF %FOUND(MASTER) AND NOT %FOUND(GOLD) C ... C ENDIF
Figura 128. %FOUND utilizado para probar una operacin de archivo con un parmetro
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D Numbers C '0123456789' D Position S 5I 0 CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* Si no se requiere la posicin real del nombre, basta con usar C* %FOUND para probar los resultados de la operacin SCAN. C* Si el valor de Name es 'Barbara' y el de Line es C* 'in the city of Toronto. ', %FOUND devolver '0'. C* Si el valor de Line es 'the city of Toronto where Barbara lives, ' C* %FOUND devolver '1'. C Name SCAN Line C IF %FOUND C EXSR PutLine C ENDIF C* Si Value contiene el valor '12345.67', Position se establecer C* en 6 y %FOUND devolver el valor '1'. C* Si Value contiene el valor '10203040', Position se establecer C* en 0 y %FOUND devolver el valor '0'. C Numbers CHECK Value Position C IF %FOUND C EXSR HandleNonNum C ENDIF
%GETATR devuelve el valor de atributo de un componente de una ventana. Tanto el primero como el segundo parmetro pueden ser %WINDOW o %PART. Notas: 1. La funcin incorporada %GETATR no afecta a los campos del programa correspondientes a los componentes. Si desea que el campo de programa correspondiente para el componente contenga el valor actual de un campo de entrada, convirtalo en el destino de %GETATR incorporada; por ejemplo:
327
2. La funcin incorporada %GETATR no soporta valores enteros con signo y sin signo de 1 y 8 bytes ni valores Unicode.
%GRAPH convierte el valor de la expresin de tipo carcter, grfico o UCS-2 y devuelve un valor grfico. El resultado tendr una longitud variable si el parmetro tiene una longitud variable. El segundo parmetro, ccsid, es opcional e indica el CCSID de la expresin resultante. El CCSID toma por omisin el CCSID grfico relacionado con el CCSID de la estacin de trabajo. Si se especifica CCSID(*GRAPH : *IGNORE) en la especificacin de control o se asume para el mdulo, no se permite la funcin %GRAPH incorporada. Si el parmetro es una constante, la conversin se efectuar en tiempo de compilacin. En este caso, el CCSID es el CCSID grfico relacionado con el CCSID del archivo fuente. Si la conversin provoca caracteres de sustitucin, se emite un mensaje de aviso en tiempo de compilacin. En tiempo de ejecucin, se establece el estado 00050 y no se emite ningn mensaje de error. Nota: No se soportan las conversiones entre dos CCSID Unicode. Para obtener una lista de los valores de CCSID soportados, consulte el tema Apndice D. Valores CCSID soportados en la pgina 585
328
HKeywords++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ H CCSID(*GRAPH : 942) DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++ D char S 5A INZ('abcde') D* Se utiliza la funcin %GRAPH incorporada para inicializar un campo grfico D graph S 10G INZ(%GRAPH('AABBCCDDEE')) D ufield S 2C INZ(%UCS2('FFGG')) D graph2 S 2G CCSID(951) INZ(*HIVAL) D isEqual S 1N D proc PR D gparm 2G CCSID(951) VALUE CSRN01Factor1+++++++Opcode&ExtExtended-factor2+++++++++++++++++++++++++++ C EVAL graph = %GRAPH(char) + %GRAPH(ufield) * Ahora graph tiene los 7 caracteres grficos AABBCCDDEEFFGG. C EVAL isEqual = graph = %GRAPH(graph2 : 942) * El resultado de la funcin incorporada %GRAPH es el valor de * graph2, cuyo CCSID 951 se convierte a CCSID 942. C EVAL graph2 = graph * El valor de graph se convierte de CCSID 942 a CCSID 951 * y se almacena en graph2. * Esta conversin la realiza implcitamente el compilador. CALLP proc(graph) * El valor de graph se convierte de CCSID 942 a CCSID 951 * de forma implcita, como parte del paso del parmetro por valor.
%INT convierte el valor de la expresin numrica en entero. Todos los dgitos decimales se truncan. Esta funcin incorporada nicamente se puede utilizar en expresiones. %INT se puede utilizar para truncar las posiciones decimales de un valor flotante o decimal, permitiendo que se puedan utilizar como un ndice de matriz.
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++ D p7 s 7p 3 inz (1234.567) D s9 s 9s 5 inz (73.73442) D f8 s 8f inz (123.789) D result1 s 15p 5 D result2 s 15p 5 D result3 s 15p 5 D array s 1a dim (200) D a s 1a CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++ C eval result1 = %int (p7) + 0.011 C eval result2 = %int (s9) C eval result3 = %inth (f8) C* El valor de "result1" ahora es 1234.01100. C* El valor de "result2" ahora es 73.00000. C* El valor de "result3" ahora es 124.00000. C eval a = array (%inth (f8)) C* %INT y %INTH se pueden utilizar como ndices de matriz
329
%INTH es igual a %INT, pero si la expresin numrica es un valor flotante o decimal, se aplica redondeo al valor de la expresin numrica al efectuar la conversin al tipo entero. Si no se puede llevar a cabo el redondeo, no se emite ningn mensaje.
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++ D p7 s 7p 3 inz (1234.567) D s9 s 9s 5 inz (73.73442) D f8 s 8f inz (123.789) D result1 s 15p 5 D result2 s 15p 5 D result3 s 15p 5 D array s 1a dim (200) D a s 1a CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++ C eval result1 = %int (p7) + 0.011 C eval result2 = %int (s9) C eval result3 = %inth (f8) C* El valor de "result1" ahora es 1234.01100. C* El valor de "result2" ahora es 73.00000. C* El valor de "result3" ahora es 124.00000. C eval a = array (%inth (f8)) C* %INT y %INTH se pueden utilizar como ndices de matriz
%LEN sirve para obtener la longitud de una expresin variable o para establecer la longitud actual de un campo de longitud variable. El parmetro no debe ser una constante figurativa.
330
Para todos los dems tipos de datos, el valor devuelto es el nmero de bytes del valor.
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D num1 S 7P 2 D num2 S 5S 1 D num3 S 5I 0 inz(2) D chr1 S 10A inz('Toronto ') D chr2 S 10A inz('Munich ') D ptr S * CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C* Expresiones numricas: C eval num1 = %len(num1) <=== 7 C eval num1 = %decpos(num2) <=== 1 C eval num1 = %len(num1*num2) <=== 12 C eval num1 = %decpos(num1*num2) <=== 3 C* Expresiones de carcter: C eval num1 = %len(chr1) <=== 10 C eval num1 = %len(chr1+chr2) <=== 20 C eval num1 = %len(%trim(chr1)) <=== 7 C eval num1 = %len(%subst(chr1:1;:num3;) C + ' ' + %trim(chr2)) <=== 9 C* %len y %decpos pueden ser tiles con otras funciones incorporadas. C* Aunque esta divisin se realiza en formato flotante, el resultado se C* convierte para la misma precisin que el resultado de la eval: C eval num1 = 27 + %dec (%float(num1)/num3 C : %len(num1) C : %decpos(num1)) C* Se debe asignar espacio suficiente para el resultado de la concateC* nacin (adems de un byte adicional para un carcter nulo final): C eval num3 = %len(chr1+chr2)+1 C alloc num3 ptr C eval %str(ptr : num3) = chr1 + chr2
331
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D* D city S 40A VARYING INZ('North York') D n1 S 5i 0 CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C* Se utiliza %LEN para obtener la longitud actual de un campo de C* longitud variable: C EVAL n1 = %LEN(city) C* Longitud actual, n1 = 10 C* C* Se utiliza %LEN para establecer la longitud actual de un campo C* de longitud variable: C EVAL %LEN(city) = 5 C* city = 'North' (length is 5) C* C EVAL %LEN(city) = 15 C* city = 'North ' (length is 15)
La funcin incorporada %NULLIND se puede utilizar para consultar o establecer el indicador de nulo para los campos con posibilidad de nulos. Esta funcin incorporada slo se puede utilizar si se especifica la opcin de compilacin Control de usuario o la palabra clave ALWNULL(*USRCTL). El nombre de campo puede ser un elemento de matriz con posibilidad de nulos, una estructura de datos, un campo autnomo, un subcampo o una estructura de datos de varias apariciones. %NULLIND slo se puede utilizar en expresiones de factor ampliado 2. Si se utiliza en la parte derecha de una expresin, esta funcin devuelve el valor del indicador de nulo del campo con posibilidad de nulos. El valor puede ser *ON u *OFF. Si se utiliza en la parte izquierda de una expresin, esta funcin sirve para establecer en *ON o en *OFF el indicador de nulo de los campos con posibilidad de nulos. El contenido de un campo con posibilidad de nulos no se modifica. En Soporte de valores nulos de base de datos en la pgina 128 hallar ms informacin referente al manejo de registros con claves y campos con posibilidad de nulos.
332
CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C* C* Comprobar el indicador de nulo para el campo con posibilidad de nulo. C* C IF %NULLIND(fieldname1) C : C ENDIF CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C* C* Establecer el indicador de nulo para un campo con posibilidad de nulo. C* C EVAL %NULLIND(fieldname1) = *ON C EVAL %NULLIND(fieldname2) = *OFF
%OPEN devuelve 1 si el archivo especificado est abierto. Se considera que un archivo est abierto si lo ha abierto el programa RPG en el transcurso de la inicializacin, o bien una operacin OPEN, y no se ha cerrado posteriormente. Si el archivo est condicionado por un indicador externo y ste estaba desactivado en la inicializacin del programa, se considera que el archivo est cerrado y %OPEN devuelve 0.
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... FFilename++IT.A.FRlen+......A.Device+.Keywords+++++++++++++++++++++++++++++ F* Se abre el archivo de impresora en las especificaciones de clculo FQSYSPRT O F 132 PRINTER USROPN CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* Abrir el archivo si no lo est ya C IF NOT %OPEN(QSYSPRT) C OPEN QSYSPRT C ENDIF ...
%PADDR devuelve un valor de tipo puntero de procedimiento. Este valor es la direccin del punto de entrada especificado como argumento. %PADDR slo se puede comparar con y asignar a elementos del tipo puntero de procedimiento. El parmetro de %PADDR debe ser un literal hexadecimal o de caracteres o bien un nombre de constante que represente a un literal hexadecimal o de caracteres. El nombre de punto de entrada especificado en la serie de caracteres debe encontrarse en el momento de enlazar el programa y la combinacin de maysculas y minsculas debe ser correcta.
333
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D D PROC S * PROCPTR D INZ (%PADDR ('FIRSTPROG')) D PROC1 S * PROCPTR CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C* C* La sentencia siguiente llama al procedimiento 'FIRSTPROG'. C* C CALLB PROC *----------------------------------------------------------------C* La sentencia siguiente llama al procedimiento 'NextProg'. C* Se trata de un procedimiento en C y combina maysculas y minsculas. C* Tenga en cuenta que el nombre de procedimiento es sensible a las C* maysculas y a las minsculas. C* C EVAL PROC1 = %PADDR ('NextProg') C CALLB PROC1
%REM devuelve el resto de la divisin entre los operandos n y m. Los dos operandos deben ser valores numricos con cero posiciones decimales. Si alguno de los operandos es un valor numrico empaquetado, con zona o binario, el resultado es un valor numrico empaquetado. Si alguno de los operandos es un valor numrico entero, el resultado es un entero. De lo contrario, el resultado es un valor numrico sin signo. No se permiten operandos numricos de coma flotante. El resultado tiene el mismo signo que el dividendo. (Vase tambin %DIV (Devolver la porcin entera del cociente) en la pgina 319.) %REM y %DIV presentan la siguiente relacin entre s:
%REM(A:B) = A - (%DIV(A:B) * B)
Si los operandos son constantes que pueden caber en campos enteros o sin signo de 8 bytes, la funcin incorporada aplica la evaluacin de constantes en tiempo de compilacin. En este caso, es posible codificar la funcin incorporada %REM en las especificaciones de definiciones.
334
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ * D A S 10I 0 INZ(123) D B S 10I 0 INZ(27) D DIV S 10I 0 D REM S 10I 0 D E S 10I 0 * CL0N01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ * C EVAL DIV = %DIV(A:B) C EVAL REM = %REM(A:B) C EVAL E = DIV*B + REM * Ahora, DIV = 4, REM = 15 y E = 123
%REPLACE devuelve la serie de caracteres obtenida al insertar una serie de sustitucin en la serie fuente, empezando por la posicin inicial y sustituyendo el nmero especificado de caracteres. El primer y segundo parmetro deben ser de tipo carcter, grfico o UCS-2 y su formato puede ser de longitud variable o fija. El segundo parmetro debe ser del mismo tipo que el primero. El tercer parmetro representa la posicin inicial, medida en caracteres, de la serie de sustitucin. Si no se especifica, la posicin inicial ser el principio de la serie fuente. El valor puede estar comprendido ente uno y la longitud actual de la serie fuente ms uno. El cuarto parmetro representa el nmero de caracteres de la serie fuente que deben sustituirse. Si se especifica cero, la serie de sustitucin se inserta antes de la posicin inicial especificada. Si no se especifica el parmetro, el nmero de caracteres sustituidos es el mismo que la longitud de la serie de sustitucin. El valor debe ser mayor o igual que cero y menor o igual que la longitud actual de la serie fuente. La posicin inicial y la longitud pueden ser una expresin o valor numricos cualesquiera sin posiciones decimales. El valor devuelto ser de longitud variable si la serie fuente o la de sustitucin lo son o bien si la posicin inicial o la longitud del fuente a sustituir son variables. En caso contrario, el resultado ser de longitud fija.
335
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D var1 S 30A INZ('Windsor') VARYING D var2 S 30A INZ('Ontario') VARYING D var3 S 30A INZ('Canada') VARYING D fixed1 S 15A INZ('California') D date S D INZ(D'1997-02-03') D result S 100A VARYING CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C C EVAL result = var1 + ', ' + 'ON' C* result = 'Windsor, ON' C* C* %REPLACE con 2 parmetros para sustituir el texto que hay al C* principio de la serie: C EVAL result = %REPLACE('Toronto': result) C* result = 'Toronto, ON' C*
%REPLACE con 3 parmetros para sustituir el texto que hay en la posicin especificada: EVAL result = %REPLACE(var3: result: %SCAN(',': result)+2) result = 'Toronto, Canada' %REPLACE con 4 parmetros para insertar texto: EVAL result = %REPLACE(', '+var2: result: %SCAN(',': result): 0) result = 'Toronto, Ontario, Canada' %REPLACE con 4 parmetros para sustituir series con longitudes diferentes: EVAL result = %REPLACE('Scarborough': result: 1: %SCAN(',': result)-1) result = 'Scarborough, Ontario, Canada' %REPLACE con 4 parmetros para suprimir texto: EVAL result = %REPLACE('': result: 1: %SCAN(',': result)+1) result = 'Ontario, Canada' %REPLACE con 4 parmetros para aadir texto al final de la serie: EVAL result = %REPLACE(', ' + %CHAR(date): result: %LEN(result)+1: 0) result = 'Ontario, Canada, 1997-02-03' %REPLACE con 3 parmetros para sustituir el texto de longitud fija specified position: (fixed1 has fixed-length of 15 chars) EVAL result = %REPLACE(fixed1: result: %SCAN(',': result)+2) result = 'Ontario, California -03' %REPLACE con 4 parmetros para aadir texto de prefijo al principio: EVAL result = %REPLACE('Somewhere else: ': result: 1: 0) result = 'Somewhere else: Ontario, California -03'
336
%SCAN devuelve la primera posicin del argumento de bsqueda dentro de la serie de origen, o 0 si no se ha encontrado. Si se ha especificado la posicin de inicio, la bsqueda empieza a partir de la posicin de inicio. El resultado siempre es la posicin dentro de la serie de origen, incluso si se especifica la posicin de inicio. El valor por omisin de la posicin de inicio es 1. El primer parmetro debe ser de tipo carcter, grfico o UCS-2. El segundo parmetro debe ser del mismo tipo que el primer parmetro. El tercer parmetro, si se especifica, debe ser numrico con cero posiciones decimales. Si algn parmetro es de longitud variable, los valores de los restantes parmetros se cotejarn con la longitud actual y no con la longitud mxima. El tipo del valor de retorno es entero sin signo. Esta funcin incorporada se puede utilizar en cualquier lugar en que una expresin de entero sin signo sea vlida. Nota: A diferencia del cdigo de operacin SCAN, %SCAN no puede devolver una matriz que contenga todas las apariciones de la serie de bsqueda y su resultado no puede comprobarse con la funcin incorporada %FOUND.
D source D pos C C* C* C C* C* C C* C* C C* C* S S 15A inz('Dr. Doolittle') 5U 0
EVAL pos = %scan('oo' : source) Despus de EVAL, pos = 6 puesto que 'oo' empieza en la posicin 6 'Dr. Doolittle'. EVAL pos = %scan('D' : source : 2) Despus de EVAL, pos = 5 puesto que la primera 'D' localizada a partir de la posicin 2 est en la posicin 5. EVAL pos = %scan('abc' : source) Despus de EVAL, pos = 0 puesto que no se ha encontrado 'abc' 'Dr. Doolittle'. EVAL pos = %scan('Dr.' : source : 2) Despus de EVAL, pos = 0 puesto que no se ha encontrado 'Dr.' en 'Dr. Doolittle', si la bsqueda empieza a partir de la posicin 2.
%SETATR establece el valor de atributo de un componente de una ventana. Tanto el primero como el segundo parmetro pueden ser %WINDOW o %PART. Notas: 1. La funcin incorporada %SETATR no afecta a los campos del programa correspondientes a los componentes. Para asegurar que el valor de atributo y el valor del campo del programa sean iguales, utilice el campo del programa para definir el valor del atributo. Esto se aplica a los atributos que tienen campos de programa correlacionados, como los campos de entrada con el atributo TEXT. 2. La funcin incorporada %SETATR no soporta valores enteros con signo y sin signo de 1 y 8 bytes ni valores Unicode.
Captulo 23. Funciones incorporadas
337
%SIZE devuelve el nmero de bytes que ocupa la constante o el campo. El argumento puede ser un literal, una constante con nombre, un subcampo de estructura de datos, un campo, una matriz o un nombre de tabla. No puede, sin embargo, contener una expresin. El valor devuelto tiene el formato entero sin signo (tipo U). En el caso de un literal grfico, el tamao es el nmero de bytes que ocupan los caracteres grficos. Para un literal hexadecimal o UCS-2, el tamao devuelto es la mitad del nmero de dgitos hexadecimales del literal. En el caso de los campos de longitud variable, %SIZE devuelve el nmero total de bytes que ocupa el campo (dos bytes ms que la longitud mxima declarada). Si el argumento es un nombre de matriz, de tabla o de estructura de de datos de mltiples apariciones, el valor que se devuelve es el tamao de un elemento o aparicin. Si se especifica *ALL como segundo parmetro de %SIZE, el valor que se devuelve es el almacenamiento que ocupan todos los elementos o apariciones. Con una estructura de datos de mltiples apariciones que contiene subcampos de puntero, el tamao puede ser mayor que el resultado de multiplicar el de una aparicin por el nmero de apariciones. Esto se debe que el sistema precisa que los punteros se coloquen el el almacenamiento en direcciones divisibles por 16. Ello significa que la longitud de cada aparicin puede haberse aumentado para que sea un mltiplo exacto de 16 con el objetivo de que los subcampos de puntero se coloquen correctamente en el almacenamiento de cada aparicin. %SIZE se puede especificar en cualquier posicin de la especificacin de definicin en la que se permita una constante numrica y en una expresin en el campo del factor 2 ampliado de la especificacin de clculo.
338
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D D arr1 S 10 DIM(4) D table1 S 5 DIM(20) D field1 S 10 D field2 S 9B 0 D field3 S 5P 2 D mds DS 20 occurs(10) D mds_size C const (%size (mds: *all)) D mds_ptr DS 20 OCCURS(10) D pointer * D D vCity S 40A VARYING INZ('North York') D fCity S 40A INZ('North York') CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C Result C eval num = %SIZE(field1) 10 C eval num = %SIZE('HH') 2 C eval num = %SIZE(123.4) 4 C eval num = %SIZE(-03.00) 4 C eval num = %SIZE(arr1) 10 C eval num = %SIZE(arr1:*ALL) 40 C eval num = %SIZE(table1) 5 C eval num = %SIZE(table1:*ALL) 100 C eval num = %SIZE(mds) 20 C eval num = %SIZE(mds:*ALL) 200 C EVAL num = %SIZE(mds_ptr) 20 C EVAL num = %SIZE(mds_ptr:*ALL) 320 C eval num = %SIZE(field2) 4 C eval num = %SIZE(field3) 3 C eval n1 = %SIZE(vCity) 42 C EVAL n2 = %SIZE(fCity) 40
%STATUS devuelve el valor ms reciente establecido para el estado de archivo o de programa. %STATUS se establece cada vez que cambia el estado del programa o cualquier estado de archivo, normalmente al producirse un error. Si se utiliza %STATUS sin el parmetro opcional de nombre de archivo, devuelve el estado del ltimo programa o archivo que se ha cambiado. Si se ha especificado un archivo, se devuelve el valor contenido en el campo INFDS *STATUS del archivo especificado. No es necesario que se haya especificado INFDS para el archivo. %STATUS empieza con un valor de retorno de 00000 y se restablece a 00000 antes de que comience cualquier operacin con el ampliador E especificado. El mejor momento para comprobar %STATUS es inmediatamente despus de una operacin con el ampliador E o un indicador de error especificado, o bien al principio de INFSR o la subrutina *PSSR.
339
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* El ampliador 'E' indica que si se produce un error, ste C* debe manejarse como si se hubiese codificado un indicador de error. C* El xito de la operacin puede comprobarse utilizando la C* funcin incorporada %ERROR. El estado asociado con el error C* puede comprobarse con la funcin incorporada %STATUS. C EXFMT(E) INFILE C IF %ERROR C EXSR CheckError C ENDIF C ... C*------------------------------------------------------------------C* CheckError: Subrutina para procesar un error de E/S de archivo C*------------------------------------------------------------------C CheckError BEGSR C SELECT C WHEN %STATUS < 01000 C* No se ha producido ningn error C WHEN %STATUS = 01211 C* Se ha intentado leer un archivo que no est abierto C EXSR InternalError C OTHER C* Se ha producido un error de otra ndole C EXSR FileError C C ENDSL ENDSR
340
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords++++++++++++++++++++++++++ D Zero S 5P 0 INZ(0) CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* %STATUS empieza con un valor de 0 C* C* La operacin SCAN siguiente provocar una bifurcacin a *PSSR C* porque la posicin inicial tiene un valor de 0. C 'A' SCAN 'ABC':Zero Pos C BAD_SCAN TAG C* La operacin EXFMT siguiente tiene un ampliador 'E', por lo que C* se establecer %STATUS a 0 antes de que empiece la operacin. C* As pues, es vlido comprobar %STATUS despus de la operacin. C* Dado que se ha codificado el ampliador 'E', tambin se puede C* utilizar %ERROR para comprobar si se ha producido un error. C READ(E) REC1 C IF %ERROR C SELECT C WHEN %STATUS = 01211 C ... C WHEN %STATUS = 01299 C ... C* La operacin SCAN siguiente tiene un indicador de error. No se C* establecer %STATUS a 0 antes de que empiece la operacin, pero es C* razonable comprobar %STATUS si el indicador de error est activado. C 'A' SCAN 'ABC':Zero Pos 10 C IF *IN10 AND %STATUS = 00100 C ... C* La operacin SCAN siguiente no produce ningn error. C* Dado que no hay ningn ampliador 'E', no se establecer %STATUS C* a 0, con lo que devolvera un valor de 00100 del error anterior. C* Por lo tanto, no es aconsejable utilizar %STATUS despus de una C* operacin que no tiene codificado ningn indicador de error ni C* el ampliador 'E', ya que no se puede estar seguro de que el valor C* pertenezca a la operacin anterior. C 'A' SCAN 'ABC' Pos C ... C *PSSR BEGSR C* Se puede utilizar %STATUS en *PSSR, ya que debe haberse producido un error. C IF %STATUS = 00100 C GOTO BAD_SCAN C ...
%STR se utiliza para crear o utilizar series de caracteres con terminacin de nulo, que se utilizan comnmente en aplicaciones C y C++. El primer parmetro debe ser una variable basada en puntero. El segundo parmetro, si se especifica, debe ser un valor numrico con cero posiciones decimales. Si no se especifica, toma el valor por omisin de 65535. El primer parmetro debe sealar al almacenamiento que sea como mnimo de la misma longitud que la que proporciona el segundo parmetro.
341
Condiciones de error: 1. Si el parmetro de longitud no se encuentra entre 1 y 65535, se producir un error con el estado 00100. 2. Si no se establece el puntero, se producir un error con el cdigo de estado 00222. 3. Si el almacenamiento que indica el puntero es menor que el que indica el parmetro de longitud: a. Se puede producir un error con el cdigo de estado 00222 b. Pueden daarse los datos %STR (lado derecho) Cuando se utiliza a la derecha de una expresin, esta funcin devuelve los datos a los que seala el primer parmetro, pero sin incluir el primer carcter nulo (x00) hallado en la longitud especificada. Esta funcin incorporada se puede utilizar en cualquier lugar en que la expresin de caracteres sea vlida. Durante el tiempo de ejecucin no se proporcionar ningn error si el terminador de nulo no se encuentra dentro de la longitud especificada. En este caso, el valor de resultado tiene la misma longitud que la longitud especificada.
D String1 D Fld1 C C* Suponiendo que C* carcter nulo, S S * 10A EVAL Fld1 = '<' + %str(String1) + '>' String1 seala a '123|' en donde '|' representa el despus de EVAL, Fld1 = '<123> '.
%STR (lado izquierdo) Cuando se utiliza en el lado izquierdo de una expresin, %STR(ptr:longitud) asigna el valor del lado derecho de la expresin al almacenamiento hacia el que
342
seala el puntero, aadiendo un byte con terminacin de nulo situado al final. La longitud mxima que se puede especificar es 65535. Esto significa que como mximo se pueden utilizar 65534 bytes del lado derecho, puesto que se debe reservar un byte para el terminador de nulo situado al final. La longitud indica la cantidad de almacenamiento sealada por el puntero y debe ser superior a la longitud mxima de la que dispondr el lado derecho. Se debe establecer el puntero para que seale hacia un almacenamiento como mnimo del mismo tamao que la longitud del parmetro. Si la longitud del lado derecho de la expresin es superior a la longitud especificada, el valor del lado derecho se truncar. Nota: Si las dos siguientes son ciertas, los datos se daarn: 1. El parmetro de longitud es mayor que la longitud real de los datos que direcciona el puntero. 2. La longitud del lado derecho es mayor o igual que la longitud real de los datos que direcciona el puntero. Si asigna de modo dinmico el almacenamiento para que lo utilice %STR, debe hacer un seguimiento de la longitud que ha asignado.
D String1 S * D Fld1 S 10A ... C EVAL %str(String1: 25) = 'abcdef' C* El almacenamiento hacia el que seala String1 ahora contiene 'abcdef|' C* Los bytes 8-25 a continuacin del terminador de nulo no han cambiado. D String1 S * D Fld1 S 10A ... C EVAL %str(String1 : 4) = 'abcdef' C* El almacenamiento hacia el que seala String1 ahora contiene 'abc|'
%SUBST devuelve una parte de un argumento serie. Tambin se puede utilizar como resultado de una asignacin con el cdigo de operacin EVAL. El parmetro inicio representa la posicin inicial de la subserie. El parmetro longitud representa la longitud de la subserie. Si no se especifica, ser la longitud del parmetro serie menos el valor inicial ms uno. La serie debe ser de datos de tipo carcter, grfico o UCS-2. La posicin inicial y la longitud pueden ser una expresin o valor numrico sin posiciones decimales. La posicin inicial debe ser mayor que cero. La longitud debe ser mayor o igual a cero. Si el parmetro de serie es de longitud variable, los valores de los restantes parmetros se cotejarn con la longitud actual y no con la longitud mxima.
343
Cuando se especifican como parmetros de una palabra clave de especificacin de definicin, deben ser literales o constantes con nombre que representen a literales. Cuando se especifican en una especificacin de clculo de formato libre, puede ser cualquier expresin.
En los caracteres grficos o UCS-2, la posicin inicial y la longitud es coherente con la longitud de caracteres de doble byte (la posicin 3 es el tercer carcter de doble byte y la longitud 3 indica 3 caracteres de doble byte sobre los que se realizar la operacin).
344
CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C* C* En este ejemplo, CITY contiene "Toronto, Ontario" C* %SUBST devuelve el valor 'Ontario'. C* C ' ' SCAN CITY C C IF %SUBST(CITY:C+1) = 'Ontario' C EVAL CITYCNT = CITYCNT+1 C ENDIF C* C* Antes de EVAL, A tiene el valor "abcdefghijklmno". C* Despus de EVAL, A tiene el valor "ab****ghijklmno" C* C EVAL %SUBST(A:3:4) = '****'
%TRIM devuelve la serie dada sin los blancos iniciales ni de cola. La serie puede tener datos de tipo carcter, grficos o UCS-2. Cuando se especifica como parmetro de una palabra clave de especificacin de definicin, el parmetro serie debe ser una constante.
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D D LOCATION S 16A CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C* C* LOCATION tendr el valor "Toronto, Ontario". C* C EVAL LOCATION = %TRIM(' Toronto, Ontario ') C* C* NAME tendr el valor "Chris Smith". C* C MOVE(P) 'Chris' FIRSTNAME 10 C MOVE(P) 'Smith' LASTNAME 10 C EVAL NAME = C %TRIM(FIRSTNAME) +' '+ %TRIM(LASTNAME)
%TRIML devuelve la serie dada sin los blancos iniciales. La serie puede tener datos de tipo carcter, grficos o UCS-2. Cuando se especifica como parmetro de una palabra clave de especificacin de definicin, el parmetro serie debe ser una constante.
345
CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C* C* LOCATION tendr el valor "Toronto, Ontario". C* C EVAL LOCATION = %TRIML(' Toronto, Ontario ')
%TRIMR devuelve la serie dada sin los blancos de cola. La serie puede tener datos de tipo carcter, grficos o UCS-2. Cuando se especifica como parmetro de una palabra clave de especificacin de definicin, el parmetro serie debe ser una constante.
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D D LOCATION S 18A CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C* C* LOCATION tendr el valor "Toronto, Ontario". C* C EVAL LOCATION = %TRIMR(' Toronto, Ontario ') C* C* NAME tendr el valor "Chris Smith". C* C MOVEL(P) 'Chris' FIRSTNAME 10 C MOVEL(P) 'Smith' LASTNAME 10 C EVAL NAME = C %TRIMR(FIRSTNAME) +' '+ %TRIMR(LASTNAME)
%UCS2 convierte el valor de la expresin de tipo carcter o grfico y devuelve un valor UCS-2. El resultado tendr una longitud variable si el parmetro tiene una longitud variable o si el parmetro es un carcter de un solo byte. El segundo parmetro, ccsid, es opcional e indica el CCSID de la expresin resultante. El CCSID toma por omisin el valor de 13488. Si el parmetro es una constante, la conversin se efectuar en tiempo de compilacin. Si la conversin provoca caracteres de sustitucin, se emite un mensaje de aviso en tiempo de compilacin. En tiempo de ejecucin, se establece el estado 00050 y no se emite ningn mensaje de error.
346
HKeywords++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ H CCSID(*UCS2 : 13488) DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++ D char S 5A INZ('abcde') D graph S 2G INZ(G'oAABBi') * Se utiliza la funcin %UCS2 incorporada para inicializar un campo UCS-2. D ufield S 10C INZ(%UCS2('abcdefghij')) D ufield2 S 1C CCSID(61952) INZ(*LOVAL) D isLess 1N D proc PR D uparm 2G CCSID(13488) CONST CSRN01Factor1+++++++Opcode&ExtExtended-factor2+++++++++++++++++++++++++ C EVAL ufield = %UCS2(char) + %UCS2(graph) * ufield ahora tiene 7 caracteres UCS-2 que representan * 'a.b.c.d.e.AABB' donde 'x.' representa la forma UCS-2 de 'x' C EVAL isLess = ufield < %UCS2(ufield2:13488) * El resultado de la funcin incorporada %UCS2 es el valor de * ufield2, convertido de CCSID 61952 a CCSID 13488 * a efectos de la comparacin. C EVAL ufield = ufield2 * El valor de ufield2 se convierte de CCSID 61952 a * CCSID 13488 y se almacena en ufield. * Esta conversin la maneja implcitamente el compilador. CALLP proc(ufield2) * El valor de ufield2 se convierte a CCSID 13488 * de forma implcita, como parte del paso del parmetro * por referencia a constante.
%UNS convierte el valor de la expresin numrica en formato sin signo. Todos los dgitos decimales se truncan. %UNS se puede utilizar para truncar las posiciones decimales de un valor flotante o decimal, permitiendo que se puedan utilizar como un ndice de matriz.
347
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++ D p7 s 7p 3 inz (8236.567) D s9 s 9s 5 inz (23.73442) D f8 s 8f inz (173.789) D result1 s 15p 5 D result2 s 15p 5 D result3 s 15p 5 D array s 1a dim (200) D a s 1a CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++ C eval result1 = %uns (p7) + 0.1234 C eval result2 = %uns (s9) C eval result3 = %unsh (f8) C* El valor de "result1" ahora es 8236.12340. C* El valor de "result2" ahora es 23.00000 C* El valor de "result3" ahora es 174.00000. C eval a = array (%unsh (f8)) C* %UNS y %UNSH se pueden utilizar como ndices de matriz
%UNSH es igual a %UNS, excepto si la expresin numrica es un valor decimal o flotante, en cuyo caso se aplica el redondeo al valor de la expresin numrica al efectuar la conversin al tipo sin signo. Si no se puede llevar a cabo el redondeo, no se emite ningn mensaje.
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++ D p7 s 7p 3 inz (8236.567) D s9 s 9s 5 inz (23.73442) D f8 s 8f inz (173.789) D result1 s 15p 5 D result2 s 15p 5 D result3 s 15p 5 D array s 1a dim (200) D a s 1a CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++ C eval result1 = %uns (p7) + 0.1234 C eval result2 = %uns (s9) C eval result3 = %unsh (f8) C* El valor de "result1" ahora es 8236.12340. C* El valor de "result2" ahora es 23.00000 C* El valor de "result3" ahora es 174.00000. C eval a = array (%unsh (f8)) C* %UNS y %UNSH se pueden utilizar como ndices de matriz
%XFOOT realiza la suma de todos los elementos de la expresin de matriz numrica especificada.
348
La precisin del resultado es la mnima que pueda alojar el resultado de la suma de todos los elementos de la matriz, hasta un mximo de 30 dgitos. El nmero de lugares decimales del resultado es siempre el mismo que el de la expresin de matriz. Por ejemplo, si ARR es una matriz de 500 elementos de precisin (17, 4), el resultado de %XFOOT(ARR) ser (20,4). Para %XFOOT(X), donde X tiene una precisin de (m, n), la siguiente tabla muestra la precisin del resultado basndose en el nmero de elementos de X:
Elementos de X 1 2-10 11-100 101-1000 1001-10000 10001-32767 Precisin de %XFOOT(X) (m,n) (m+1,n) (m+2,n) (m+3,n) (m+4,n) (m+5,n)
Son aplicables las reglas normales para las expresiones de matriz. Por ejemplo, si ARR1 tiene 10 elementos y ARR2 tiene 20 elementos, %XFOOT(ARR1+ARR2) ser la suma de los primeros 10 elementos de ARR1+ARR2. Esta funcin incorporada es similar a la operacin XFOOT, excepto en que las matrices flotantes se suman del mismo modo que todos los restantes tipos, empezando en el ndice 1 y siguientes.
349
350
Las expresiones se codifican en la entrada 2 del factor ampliado de la especificacin de clculo. Se pueden codificar en las sentencias siguientes: v CALLP (Llamar a un procedimiento o programa con prototipo) en la pgina 408 v DOU (Hacer hasta) en la pgina 435 v DOW (Hacer mientras) en la pgina 438 v EVAL (Evaluar expresin) en la pgina 446 v EVALR (Evaluar expresin, ajuste por la derecha) en la pgina 447 v FOR (Para) en la pgina 453 v IF (Si) en la pgina 457 v RETURN (Volver al llamador) en la pgina 525 v WHEN (Seleccionar cuando sea verdadero) en la pgina 558
Operadores de expresin
Los operadores de expresin pueden ser cualquiera de los siguientes: Operaciones unitarias Las operaciones unitarias se codifican especificando la operacin seguida de un operando. Son las siguientes: + NOT La operacin ms unitaria mantiene el valor del operando numrico. La operacin menos unitaria niega el valor del operando numrico. La negacin lgica devuelve 1 si el valor del operando de tipo indicador es 0 y 0 si el operando de tipo indicador es 1. Se debe tener en cuenta que el resultado de cualquier operacin de comparacin u operacin AND u OR es un valor de tipo indicador.
Operaciones binarias Las operaciones binarias se codifican especificando la operacin entre ambos operandos. Son las siguientes: + El significado de esta operacin depende de los tipos de operandos. Se puede utilizar para: v La adicin de dos valores numricos v La concatenacin de dos valores de carcter, grficos o UCS-2 v La adicin de un desplazamiento numrico a un puntero de base El significado de esta operacin depende de los tipos de operandos. Se puede utilizar para:
351
v Restar dos valores numricos v Restar un desplazamiento numrico de un puntero de base v Restar dos punteros * / ** = <> > >= < La operacin de multiplicacin se utiliza para multiplicar dos valores numricos. La operacin de divisin se utiliza para dividir dos valores numricos. La operacin exponencial se utiliza para elevar un nmero a la potencia de otro. La operacin de igualdad devuelve 1 si ambos operandos son iguales y 0 en el caso contrario. La operacin de desigualdad devuelve 0 si ambos operandos son iguales y 1 en el caso contrario. La operacin de signo mayor que devuelve 1 si el primer operando es mayor que el segundo. La operacin de signo mayor que o igual a devuelve 1 si el primer operando es mayor o igual que el segundo. La operacin de signo menor que devuelve 1 si el primer operando es menor que el segundo.
<= (menor que o igual a La operacin menor que o igual a devuelve 1 si el primer operando es menor que o igual al segundo. AND OR La operacin AND lgica devuelve 1 si ambos operandos tienen el valor de indicador 1. La operacin lgica or devuelve 1 si uno de los operandos tiene el valor de indicador 1.
Funciones incorporadas Las funciones incorporadas se tratan en el Captulo 23. Funciones incorporadas en la pgina 309. Funciones definidas por el usuario En una expresin se puede utilizar cualquier procedimiento para el que se haya establecido un prototipo que devuelva un valor. La llamada al procedimiento se puede situar en cualquier lugar donde se pueda utilizar un valor del mismo tipo que el valor de retorno del procedimiento. Por ejemplo, supongamos que el procedimiento MYFUNC devuelve un valor de tipo carcter. El ejemplo siguiente muestra tres llamadas a MYFUNC:
C C C IF EVAL ENDIF MYFUNC(string1) = %TRIM(MYFUNC(string2)) %subst(X: 3) = MYFUNC('abc')
352
Las operaciones de la misma prioridad se evalan por orden de izquierda a derecha, excepto para **, que se evala de derecha a izquierda. Se debe tener en cuenta que, aunque una expresin se evala de izquierda a derecha, no significa que los operandos tambin se evalen de izquierda a derecha. Vea Orden de evaluacin en la pgina 365, donde obtendr ms informacin acerca de las consideraciones adicionales. En 1. 2. 3. 4. 5. 6. 7. 8. 9. esta lista se indica la prioridad de los operadores de mayor a menor: () funciones incorporadas + unitario, unitario, NOT ** *,/ + binario, binario =,>=,>,<=,<,<> AND OR
Operandos de expresin
Un operando puede ser cualquier nombre de campo, constante con nombre, literal o procedimiento con prototipo que devuelva un valor. Adems, tambin se puede utilizar el resultado de cualquier operacin como un operando para otra operacin. Por ejemplo, en la expresin A+B*21, el resultado de B*21 es un operando para la operacin de suma. En las expresiones se permiten todos los tipos de datos. Sin embargo, las operaciones especficas nicamente ofrecen soporte para tipos de datos determinados como operandos. Por ejemplo, la operacin * slo permite valores numricos como operandos. Se debe tener en cuenta que las operaciones relacionales y lgicas devuelven un valor de tipo indicador, que es un tipo especial de datos de caracteres. Por este motivo, cualquier resultado relacional o lgico se puede utilizar como operando para cualquier operacin en espera de operandos de tipo carcter.
Captulo 24. Expresiones
353
Las tablas siguientes resumen los tipos de datos soportados por los operandos de expresin. v En la Tabla 34 se describe el tipo de operando permitido para cada operador unitario y el tipo de resultado v En la Tabla 35 se describe el tipo de operandos permitido para cada operador binario y el tipo de resultado v En la Tabla 36 en la pgina 355 se describe el tipo de operandos permitido para cada funcin incorporada y el tipo de resultado. Los procedimientos para los que se ha establecido un prototipo ofrecen soporte para todos los tipos de datos definidos en la definicin del prototipo.
Tabla 34. Tipos soportados para las operaciones unitarias
Operacin (negacin) + NOT Tipo de operando Numrico Numrico Indicador Tipo de resultado Numrico Numrico Indicador
Nota: Para las operaciones siguientes, los operandos pueden ser de cualquier tipo, pero ambos deben ser del mismo tipo. = (igual a) >= (mayor que o igual a) > (mayor que) <= (menor que o igual a) < (menor que) <> (no igual a) AND (y lgico) OR (o lgico) Cualquiera Cualquiera Cualquiera Cualquiera Cualquiera Cualquiera Indicador Indicador Cualquiera Cualquiera Cualquiera Cualquiera Cualquiera Cualquiera Indicador Indicador Indicador Indicador Indicador Indicador Indicador Indicador Indicador Indicador
354
Numrico {: constante numrica : constante Numrico (empaquetado) numrica} Numrico : constante numrica : constante numrica Numrico Numrico: Numrico Numrico no flotante : constante de tipo carcter de longitud 1 {: *CURSYM | *ASTFILL | smbolo de moneda de tipo carcter} Numrico Numrico no flotante : constante de tipo carcter {Archivo} {Archivo} Numrico (empaquetado) Numrico (sin signo) Numrico Carcter (de longitud fija)
%EDITFLT %EDITW %EOF %EQUAL %ERROR %FLOAT %FOUND %GETATR %GRAPH %INT %INTH %LEN %OPEN %REM %REPLACE %REPLACE %REPLACE %SCAN %SCAN %SCAN %SETATR %STATUS %STR
Carcter (de longitud fija) Carcter (de longitud fija) Indicador Indicador Indicador
Numrico {Archivo} Carcter : carcter : carcter Carcter, grfico o UCS-2 {: ccsid} Numrico Numrico Cualquiera Nombre de archivo Numrico: Numrico
Numrico (flotante) Indicador Cualquier tipo excepto Puntero Grfico Numrico (entero) Numrico (entero) Numrico (sin signo) Indicador Numrico
Carcter : carcter {: numrico {: numrico}} Carcter Grfico : grfico {: numrico {: numrico}} UCS-2 : UCS-2 {: numrico {: numrico}} Carcter : carcter {: numrico} Grfico : grfico {: Numrico} UCS-2 : UCS-2 {: numrico} Carcter : carcter : carcter {Archivo} Puntero de base {: numrico} Numrico (decimal con zona) Carcter Grfico UCS-2 Numrico (sin signo) Numrico (sin signo) Numrico (sin signo)
Nota: Cuando %STR aparece a la izquierda de una expresin, el segundo operando es obligatorio. %SUBST %SUBST Carcter : numrico {: numrico} Grfico : numrico {: numrico} Carcter Grfico
355
Nota: Para las funciones incorporadas siguientes, los argumentos pueden ser literales, constantes con nombre o variables. %XFOOT %PADDR %SIZE Numrico Carcter Cualquiera {: *ALL} Numrico Puntero de procedimiento Numrico (sin signo)
Nota: Para las funciones incorporadas siguientes, los argumentos deben ser literales. Sin embargo, si se especifica un ndice de matriz, puede ser cualquier expresin numrica. %ADDR %ELEM %NULLIND Cualquiera Cualquiera Cualquiera Puntero de base Numrico (sin signo) Indicador
v La palabra clave TRUNCNBR de una especificacin de control no se aplica a los clculos realizados dentro de las expresiones. Si se produce un desbordamiento en el transcurso de una operacin de expresin, se emite siempre una excepcin.
356
v Si por lo menos un operando tiene un formato flotante, el resultado tendr un formato flotante. v De lo contrario, si por lo menos un operando tiene un formato decimal empaquetado, decimal con zona o binario, el resultado tendr un formato decimal empaquetado. v De lo contrario, si ambos operandos tienen un formato entero o sin signo, entonces:
Captulo 24. Expresiones
357
si el operador es -, el resultado ser un entero de lo contrario, si ambos operandos son sin signo, el resultado ser sin signo de lo contrario, el resultado ser un entero. v Un literal numrico de 10 dgitos o menos y 0 posiciones decimales se considerar que tiene un formato entero o sin signo siempre que sea posible, en funcin de si es un nmero positivo o negativo.
Para el operador /:
Si un operando es flotante, el resultado ser flotante. De lo contrario, el resultado ser un decimal empaquetado.
358
especfica, en cuyo caso, el nmero de posiciones decimales de cualquier resultado intermedio no se reduce nunca por debajo de las posiciones decimales deseadas de resultado. En la prctica, no debe preocuparse acerca de las precisiones exactas si examina el listado de compilacin al codificar expresiones numricas. Un mensaje de diagnstico indica que se van a eliminar posiciones decimales en un resultado intermedio. Si la expresin implica una asignacin, puede asegurar que se mantengan las posiciones decimales utilizando la regla de precisin de Posiciones decimales de resultado para la sentencia mediante el ampliador de cdigo de operacin (R). Si no se puede utilizar la regla de precisin de Posiciones decimales de resultado (por ejemplo, en una expresin relacional), se puede usar la funcin incorporada %DEC para convertir el resultado de una subexpresin a una precisin menor, que puede evitar la prdida de posiciones decimales.
Nota: Las operaciones siguientes generan un resultado numrico. Ln es la longitud del operando en dgitos, siendo n una r para el resultado o bien un nmero que representa al operando. Dn es el nmero de dgitos que hay a la derecha de la coma decimal, siendo n una r para el resultado o un nmero que representa al operando. T es el valor temporal. Tenga en cuenta que si algn operando tiene una representacin de coma flotante (por ejemplo, es el resultado del operador de exponencial), el resultado tambin es un valor de coma flotante, y las reglas de precisin no se aplican. Un valor de coma flotante tiene la precisin disponible de la representacin de coma flotante de doble precisin.
359
Nota: Las operaciones siguientes generan un resultado de caracteres. Ln representa la longitud del operando en cantidad de caracteres. C1+C2 Lr=min(L1+L2,65535)
Nota: Las operaciones siguientes generan un resultado DBCS. Ln representa la longitud del operando en cantidad de caracteres DBCS. D1+D2 Lr=mn(L1+L2,16383)
Nota: Las operaciones siguientes generan un resultado de tipo carcter con indicador de subtipo. El resultado siempre es un valor de indicador (1 carcter). V1=V2 V1>=V2 V1>V2 V1<=V2 V1<V2 V1<>V2 V1 AND V2 V1 OR V2 1 (indicador) 1 (indicador) 1 (indicador) 1 (indicador) 1 (indicador) 1 (indicador) 1 (indicador) 1 (indicador)
360
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D FLD1 S 15P 4 D FLD2 S 15P 2 D FLD3 S 5P 2 D FLD4 S 9P 4 D FLD5 S 9P 4 CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C EVAL FLD1 = FLD2/(((FLD3/100)*FLD4)+FLD5) ( 1 ) ( 2 ) ( 3 ) ( 4 )
Al procesar la especificacin de clculo anterior, el valor resultante asignado a FLD1 tendr una precisin de cero decimales, no los cuatro decimales esperados. La razn es que al llegar a la ltima evaluacin (:rk.4:erk. en el ejemplo anterior), el nmero al que se escala el factor es negativo. Para comprenderlo, observe cmo se evala la expresin. 1 Evaluar FLD3/100 Normas:
Lr = 30 Dr=mx (30-((L1-D1)+D2), 0) = mx(30-((5-2)+0),0) = mx(30-3,09) = 27
361
Lr = 30 Dr=mx (30-((L1-D1)+D2), 0) = mx(30-((15-2)+ 21),0) = mx(30-(13+21),0) = mx(-4,0) ** NMERO NEGATIVO AL CUAL SE ESCALA EL FACTOR = 0
**
Para evitar este problema, puede cambiar la expresin anterior de modo que la primera evaluacin sea una multiplicacin en lugar de una divisin, es decir, FLD3 * 0.01 o utilice la funcin incorporada %DEC para establecer la subexpresin FLD3/100: %DEC(FLD3/100 : 15 : 4) o utilice el ampliador de operacin (R) para asegurar que el nmero de posiciones decimales nunca sea inferior a 4.
362
operaciones anteriores. Si se especifica redondeo (tanto con el ampliador de cdigo de operacin H como mediante la funcin incorporada %DECH), el nmero de posiciones decimales del resultado intermedio nunca se reduce por debajo de N+1, en donde N es el nmero de posiciones decimales del resultado. 3. Las reglas de Posicin decimal de resultado normalmente no se aplican a las expresiones condicionales, puesto que no existe resultado correspondiente. (Si deben llevarse a cabo comparaciones para una precisin determinada, se debe utilizar %DEC o %DECH en ambos argumentos.) Por otra parte, si la expresin condicional est incorporada en una expresin para la que se han proporcionado las posiciones decimales mnimas (utilizando una de las tcnicas anteriores), se aplican las reglas de Posiciones decimales de resultado.
363
* Este ejemplo muestra la precisin de los valores intermedios * utilizando las dos reglas de precisin. D p1 s 13p 2 D p2 s 13p 2 D p3 s 13p 2 D p4 s 15p 9 D s1 s 13s 2 D s2 s 13s 2 D i1 s 10i 0 D f1 s 8f 0 D proc pr 8p 3 D parm1 20p 5 valor C* En los ejemplos siguientes, se muestran dos precisiones para cada C* subexpresin. En primer lugar, la precisin natural y, a C* continuacin, la precisin ajustada. C* Ejemplo 1: C eval p1 = p1 * p2 * p3 C* p1*p2 -> P(26,4); P(26,4) C* p1*p2*p3 -> P(39,6); P(30,0) (las posiciones decimales se truncan) C eval(r) p1 = p1 * p2 * p3 C* p1*p2 -> P(26,4); P(26,4) C* p1*p2*p3 -> P(39,6); P(30,2) (las posiciones decimales no se reducen C* por debajo de las posiciones decimales C* de destino) C eval(rh) p1 = p1 * p2 * p3 C* p1*p2 -> P(26,4); P(26,5) C* p1*p2*p3 -> P(39,6); P(30,3) (las posiciones decimales no se sitan C* por debajo de decimales destino + 1) C* C C* C* C* C* C C* C* C* C* C* C* Ejemplo 2: p1*p2 s1*s2 s1*s2*p4 p1*p2*proc() p1*p2 s1*s2 s1*s2*p4 p1*p2*proc() -> -> -> -> -> -> -> -> eval p4 = p1 * p2 * proc (s1*s2*p4) P(26,4); P(26,4) P(26,4); P(26,4) P(41,13); P(30,2) (las posiciones decimales se truncan) P(34,7); P(30,3) (las posiciones decimales se truncan) eval(r) p4 = p1 * p2 * proc (s1*s2*p4) P(26,4); P(26,4) P(26,4); P(26,4) P(41,13); P(30,5) P(34,7); P(30,7) (se mantienen todos los decimales, puesto que ya se est por debajo de los decimales de destino)
364
La segunda implicacin es que si el segundo operando es una llamada a una funcin definida por el usuario, no se llamar a la funcin. Esto es importante si la funcin cambia el valor de un parmetro o de una variable global.
Orden de evaluacin
El orden de evaluacin de operandos dentro de una expresin no est garantizado. Por consiguiente, si se utiliza una variable dos veces en cualquier lugar de una expresin y existe la posibilidad de efectos laterales, quiz los resultados no sean los esperados. Por ejemplo, considere el fuente que se muestra en la Figura 161, en donde A es una variable y FN es un procedimiento que modifica a A. Existen dos apariciones de A en la parte de expresin de la segunda operacin EVAL. Si el lado izquierdo (operando 1) de la operacin de suma se evala en primer lugar, se asigna el valor de 17 a X, (5 + FN(5) = 5 + 12 = 17). Si el lado derecho (operando 2) de la operacin de suma se evala en primer lugar, se asigna el valor de 18 a X, (6 + FN(5) = 6 + 12 = 18).
C* A es una variable. FN es el procedimiento que modifica a A. C EVAL A = 5 C EVAL X = A + FN(A) P FN B D FN PI 5P 0 D PARM 5P 0 C EVAL PARM = PARM + 1 C RETURN 2 * PARM P FN E
365
366
Operaciones aritmticas
Las operaciones aritmticas son las siguientes: v ADD (Aadir) en la pgina 392 v DIV (Dividir) en la pgina 432 v MULT (Multiplicar) en la pgina 497 v MVR (Mover resto) en la pgina 498 v SQRT (Raz cuadrada) en la pgina 540 v SUB (Restar) en la pgina 543 v XFOOT (Sumar los elementos de una matriz) en la pgina 563 v Z-ADD (Poner a cero y sumar) en la pgina 565 v Z-SUB (Poner a cero y restar) en la pgina 566. La figura siguiente contiene ejemplos de operaciones aritmticas:
367
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....Comments C* C* En el ejemplo siguiente, los valores iniciales de los campos son: C* C* A = 1 C* B = 10,0 C* C = 32 C* D = -20 C* E = 6 C* F = 10,0 C* G = 2,77 C* H = 70 C* J = 0,6 C* K = 25 C* L = 1,0 , 1,7 , -1,1 Resultado: C* C ADD 1 A 3 0 A = 002 C B ADD C V 5 2 V = 042,00 C B ADD D V V = -10,00 C Z-ADD C V V = 032,00 C SUB 1 E 3 0 E = 005 C C SUB B W 5 1 W = 0022,0 C C SUB D W W = 0052,0 C Z-SUB C W W = -0032,0 C MULT E F 3 0 F = 060 C B MULT G X 8 4 X = 0027,7000 C B MULT D X X = -200,0000 C DIV B H 3 0 H = 007 C C DIV J Y 6 2 Y = 0053,33 C MVR Z 5 3 Z = 00,002 C SQRT K Z Z = 05,000 C XFOOT L Z Z = 01,600
Las normas siguientes se aplican al especificar operaciones aritmticas: v Las operaciones aritmticas solo pueden llevarse a cabo en nmeros: subcampos numricos matrices numricas elementos numricos de matriz elementos numricos de tabla constantes numricas con nombre constantes figurativas numricas literales numricos v En general, las operaciones se efectan utilizando el formato decimal empaquetado. Significa que se convierten los campos al formato decimal empaquetado antes de efectuarse la operacin aritmtica y luego se vuelven a convertir a los formatos especificados, si es necesario, antes de colocarse el resultado en el campo correspondiente. Sin embargo debe tener en cuenta las excepciones siguientes: Si todos los operandos son sin signo, la operacin utilizar la aritmtica sin signo. Si son todos enteros o enteros y sin signo, la operacin utilizar la aritmtica de los enteros. Si alguno de los operandos es de coma flotante, los dems operandos se convertirn a coma flotante. Sin embargo, el operador DIV utiliza tanto el formato decimal empaquetado como el de coma flotante para efectuar sus operaciones. Para obtener ms
368
v v v
informacin acerca de la aritmtica de nmeros enteros y sin signo, consulte el apartado Aritmtica de enteros y sin signo La alineacin decimal se lleva a cabo para todas las operaciones aritmticas. Aunque se puede producir truncamiento, no afecta a la posicin de la coma decimal en el campo del resultado. La longitud de los campos especificados en una operacin aritmtica no puede sobrepasar los 30 dgitos. De lo contrario, los dgitos se truncan por uno o por ambos extremos, segn la posicin de la coma decimal. La opcin TRUNCNBR determina si se produce el truncamiento por la izquierda con desbordamiento numrico o si se genera un error en tiempo de ejecucin. Esta opcin se puede especificar en la ventana Crear. Si desea ms informacin, consulte la publicacin Iniciacin a VisualAge RPG y CODE/400. Una operacin numrica no cambia el factor 1 y el factor 2 a menos que sean el mismo que el campo del resultado. El resultado de una operacin aritmtica sustituye los datos que haba en el campo del resultado. El redondeo se efecta aadiendo 5 (-5 si el campo es negativo) una posicin a la derecha de la ltima posicin decimal especificada en el campo del resultado. La entrada de redondeo slo est permitida con operaciones aritmticas, pero no con una operacin MVR ni con una operacin DIV seguida de la operacin MVR. El redondeo slo afecta al resultado si el nmero de posiciones decimales del resultado calculado es mayor que el nmero de posiciones decimales del campo de resultado. El redondeo se produce despus de la operacin pero antes de situar el resultado en el campo del resultado. Los indicadores resultantes se establecen segn el valor del campo del resultado despus de haberse realizado el redondeo. Si utiliza indicadores de condicionamiento con las operaciones DIV y MVR, tendr que asegurarse de que la operacin DIV se produzca inmediatamente antes de la operacin MVR. Si los indicadores de condicionamiento de la operacin DIV provocan la ejecucin de la operacin MVR sin que se haya ejecutado la operacin DIV situada inmediatamente antes, pueden producirse resultados no deseados.
Para operaciones aritmticas en las que se utilizan los tres campos: v El factor 1, el factor 2 y el campo del resultado pueden ser tres campos diferentes v El factor 1, el factor 2 y el campo del resultado pueden ser el mismo campo v El factor 1 y el factor 2 pueden ser el mismo campo, pero distintos del campo del resultado v El factor 1 el factor 2 puede ser el mismo campo que el campo del resultado. Si desea obtener informacin acerca de cmo se utilizan las matrices con las operaciones aritmticas, consulte el apartado Especificacin de una matriz en los clculos en la pgina 168.
369
el formato sin signo, la operacin se efectuar utilizando el formato sin signo. Igualmente, si el factor 1, el factor 2 y el campo del resultado estn definidos tanto con el formato de enteros como con el formato sin signo, la operacin se efectuar utilizando el formato de enteros. Si algn campo no tiene uno de estos dos formatos, entero o sin signo, la operacin se efectuar utilizando el formato por omisin, el decimal empaquetado. Los puntos que figuran a continuacin slo son aplicables a las operaciones aritmticas de enteros y sin signo: v Si alguno de los campos est definido como campo de 4 bytes, se convertirn todos los campos a 4 bytes antes de efectuarse la operacin. v Los valores enteros y sin signo pueden utilizarse juntos en una operacin. Sin embargo, si el factor 1, el factor 2 el campo del resultado es con signo, todos los valores sin signo se convierten a enteros. Si es necesario, los valores sin signo de 2 bytes se convierten a valores enteros de 4 bytes para disminuir la posibilidad de que se produzca un desbordamiento numrico. v Si un literal tiene un mximo de 10 dgitos con cero posiciones decimales, y est comprendido en el intervalo permitido para los campos de enteros y sin signo, se cargar en formato de entero o sin signo, segn sea un valor negativo o positivo respectivamente. Nota: La aritmtica de los enteros o sin signo puede tener un rendimiento superior. No obstante, puede aumentar la posibilidad de que se produzca un desbordamiento numrico cuando se utiliza uno de estos dos tipos de aritmtica.
370
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....Comments C* C* En el ejemplo siguiente, los valores iniciales de los campos son: C* C* A = 1 C* B = 10,0 C* C = 32 C* D = -20 C* E = 6 C* F = 10,0 C* G = 2,77 C* H = 70 C* J = 0,6 C* K = 25 C* L = 1,0 , 1,7 , -1,1 Resultado: C* C ADD 1 A 3 0 A = 002 C B ADD C V 5 2 V = 042,00 C B ADD D V V = -10,00 C Z-ADD C V V = 032,00 C SUB 1 E 3 0 E = 005 C C SUB B W 5 1 W = 0022,0 C C SUB D W W = 0052,0 C Z-SUB C W W = -0032,0 C MULT E F 3 0 F = 060 C B MULT G X 8 4 X = 0027,7000 C B MULT D X X = -200,0000 C DIV B H 3 0 H = 007 C C DIV J Y 6 2 Y = 0053,33 C MVR Z 5 3 Z = 00,002 C SQRT K Z Z = 05,000 C XFOOT L Z Z = 01,600
Operaciones de matrices
Las operaciones de matrices son las siguientes: v LOOKUP (Buscar un elemento en tabla o matriz) en la pgina 466 v MOVEA (Mover matriz) en la pgina 483 v SORTA (Clasificar una matriz) en la pgina 539 v XFOOT (Sumar los elementos de una matriz) en la pgina 563. Mientras que numerosas operaciones trabajan con matrices, estas operaciones llevan a cabo funciones especficas de matriz. Vea cada operacin para una explicacin de su funcin.
Operaciones de bits
Las operaciones de bits son las siguientes: v BITOFF (Desactivar los bits) en la pgina 400 v BITON (Activar los bits) en la pgina 401 v TESTB (Comprobar bit) en la pgina 551. Los bits de un byte se numeran de izquierda a derecha. El bit situado ms a la izquierda es el bit 0. En estas operaciones, el factor 2 contiene la trama de bits (nmeros de bit) y el campo de resultado contiene un campo de tipo carcter de un byte en el que se realizar la operacin. Para especificar los nmeros de bit en el factor 2, se permite utilizar un literal hexadecimal de 1 byte o un campo de tipo carcter de 1 byte. Los nmeros de bit se indican mediante los bits que se activan
Captulo 25. Cdigos de operacin
371
en el literal o en el campo. Alternativamente, tambin se puede especificar en el factor 2 un literal que contenga los nmeros de bit. Vea cada operacin para una explicacin de su funcin.
Operaciones de bifurcacin
Las operaciones de bifurcacin son las siguientes: v CABxx (Comparar y bifurcar) en la pgina 402 v GOTO (Ir a) en la pgina 457 v ITER (Iterar) en la pgina 461 v LEAVE (Abandonar un grupo DO/FOR) en la pgina 464 v TAG (Etiqueta) en la pgina 548. Vea cada operacin para una explicacin de su funcin.
Operaciones de llamada
Las operaciones de llamada son las siguientes: v CALL (Llamar a un programa AS/400) en la pgina 404 v CALLB (Llamar a una funcin) en la pgina 407 v CALLP (Llamar a un procedimiento o programa con prototipo) en la pgina 408 v PARM (Identificar parmetros) en la pgina 506 v PLIST (Identificar una lista de parmetros) en la pgina 508 v RETURN (Volver al llamador) en la pgina 525 v START (Iniciar un componente lgico o Llamar a programa local) en la pgina 541. Vea cada operacin para una explicacin de su funcin. CALLP es un tipo de llamada con prototipo. El segundo tipo es una llamada desde dentro de una expresin. Una llamada con prototipo es una llamada para la que se ha definido un prototipo para la interfaz de llamada. Las operaciones de llamada permiten que un procedimiento de VisualAge RPG transfiera el control a otros programas o procedimientos. Sin embargo, las llamadas con prototipo se diferencian de las operaciones CALL y CALLB por permitir una sintaxis de formato libre. La operacin RETURN transfiere el control nuevamente al programa o procedimiento de llamada y devuelve un valor, si hay alguno. Las operaciones PLIST y PARM pueden utilizarse con las operaciones CALL y CALLB para indicar qu parmetros se han de pasar a la llamada. En una llamada con prototipo, los parmetros se pasan en la llamada. La forma recomendada de llamar a un programa o procedimiento (escrito en cualquier lenguaje) es codificar una llamada con prototipo.
372
Se ha de incluir un prototipo en las especificaciones de definicin del programa o procedimiento que realiza la llamada. El compilador lo utiliza para llamar correctamente al programa o procedimiento y para asegurar que el llamador pasa los parmetros correctos. Cuando un programa o procedimiento tiene prototipo, no es necesario conocer los nombres de los elementos de datos utilizados en el programa o procedimiento; slo el nmero y el tipo de parmetros. Los prototipos mejoran la comunicacin entre programas y procedimientos. Algunas ventajas de la utilizacin de llamadas con prototipo son: v Se simplifica la sintaxis porque no se requieren operaciones PARM o PLIST. v Para algunos parmetros, se pueden pasar literales y expresiones. v El compilador ayuda a pasar el nmero adecuado de parmetros, con el tipo, formato y longitud correctos, dando un error en tiempo de compilacin si la llamada no es correcta. v El compilador ayuda a pasar suficientes parmetros con el formato y la longitud correcta para algunos tipos de parmetros, realizando una conversin en tiempo de ejecucin. La figura Figura 164 muestra un ejemplo que utiliza el prototipo ProcName, que pasa tres parmetros. El prototipo ProcName puede referirse tanto a un programa como a un procedimiento. No es importante saber esto al efectuar la llamada; conviene tenerlo en cuenta al definir el prototipo.
* El cdigo siguiente llama a ProcName con los 3 * parmetros CharField, 7 y Field2: C CALLP ProcName (Charfield: 7: Field2)
Al llamar a un procedimiento en una expresin, debe utilizar el nombre del procedimiento de manera coherente con el tipo de datos del valor de retorno especificado. Por ejemplo, si se ha definido un procedimiento para que devuelva un valor numrico, la llamada al procedimiento dentro de una expresin ha de estar donde se espera un valor numrico. Si desea ms informacin acerca de cmo llamar a los programas y procedimiento y de cmo pasar parmetros, consulte la publicacin Programacin con VisualAge para RPG. Si desea ms informacin acerca de la definicin de prototipos y parmetros, consulte la seccin Prototipos y parmetros en la pgina 67.
373
v Si el nombre del programa o de la biblioteca sobrepasa los 10 caracteres, se truncar a 10 caracteres. El nombre del programa se utiliza tal como est especificado en el literal, campo, constante con nombre o elemento de matriz, para determinar el programa que se ha de llamar. Especficamente: v Se ignoran todos los blancos iniciales o de cola. v Si el primer carcter de la entrada es una barra inclinada, se utiliza la lista de bibliotecas para encontrar el programa. v Si el ltimo carcter de la entrada es una barra inclinada, se emitir un mensaje en tiempo de compilacin. v Los caracteres en minsculas no se convierten a maysculas. v Un nombre entre comillas, por ejemplo, ABC, incluye siempre las comillas como parte del nombre del programa que se ha de llamar. Las referencias a un programa se agrupan para evitar el coste general de la resolucin en el programa destino. Todas las referencias a un programa especfico mediante una constante con nombre o un literal se agrupan de modo que el programa se resuelva slo una vez y todas las referencias ulteriores a dicho programa (por medio de una constante con nombre o un literal) no provocan la repeticin de una resolucin. Las referencias al programa se agrupan si los nombres del programa y de la biblioteca son idnticos. Todas las referencias a un programa realizadas mediante el nombre de una variable se agrupan por el nombre de la variable. Cuando se realiza una referencia al programa con una variable, se compara su valor actual con el valor utilizado en la operacin anterior de referencia al programa que utiliz dicha variable. Si el valor no ha cambiado, no se realiza ninguna resolucin. Si ha cambiado, se realiza una resolucin en el nuevo programa especificado. Observe que esta regla slo se aplica a las referencias que utilizan un nombre de variable. Las referencias que utilizan una constante con nombre o un literal nunca se vuelven a resolver y no afectan al hecho de si se vuelve a resolver una referencia a programa mediante una variable. La figura siguiente ilustra cmo se agrupan las referencias a un programa.
374
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D Pgm_Ex_A C 'LIB1/PGM1' D Pgm_Ex_B C 'PGM1' D PGM_Ex_C C 'LIB/PGM2' D* *...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C CALL Pgm_Ex_A C* C* Las dos llamadas siguientes se agruparn juntas porque las dos tienen C* el mismo nombre de programa (PGM1) y el mismo nombre de biblioteca C* (ninguno). Observe que stas no se van a agrupar con la llamada que C* ms arriba utiliza el nombre Pgm_Ex_A, porque Pgm_Ex_A tiene especificado C* un nombre de biblioteca distinto (LIB1). C* C CALL 'PGM1' C CALL Pgm_Ex_B C* C* Las dos siguientes referencias a programa se agruparn juntas porque C* las dos tienen el mismo nombre de programa (PGM2) y el mismo nombre de C* biblioteca (LIB). C* C CALL 'LIB/PGM2' C CALL Pgm_Ex_C C* *...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* La primera llamada del programa mediante CALLV, ms abajo, provocar la C* realizacin de una resolucin para la variable CALLV en el programa PGM1. C* Es independiente de cualquier llamada mediante un literal o constante C* con nombre a PGM1 que ya pueda haberse realizado en el programa. La C* segunda llamada mediante CALLV no provocar una resolucin en PGM1 C* porque el valor de CALLV no ha cambiado. C* C MOVE 'PGM1' CALLV 21 C CALL CALLV C CALL CALLV
Operaciones de comparacin
Las operaciones de comparacin son las siguientes: v ANDxx (Y) en la pgina 396 v COMP (Comparar) en la pgina 426 v CABxx (Comparar y bifurcar) en la pgina 402 v CASxx (Invocar subrutina condicionalmente) en la pgina 409 v DOU (Hacer hasta) en la pgina 435 v DOUxx (Hacer hasta) en la pgina 436 v DOW (Hacer mientras) en la pgina 438 v DOWxx (Hacer mientras) en la pgina 439 v IF (Si) en la pgina 457 v IFxx (Si) en la pgina 458 v ORxx (O) en la pgina 503 v WHEN (Seleccionar cuando sea verdadero) en la pgina 558 v WHENxx (Seleccionar cuando sea verdadero) en la pgina 559 En las operaciones ANDxx, CABxx, CASxx, DOUxx, DOWxx, IFxx, ORxx, y WHENxx, xx puede ser:
Captulo 25. Cdigos de operacin
375
xx GT LT EQ NE GE LE Blancos
Significado El factor 1 es mayor que el factor 2. El factor 1 es menor que el factor 2. El factor 1 es igual que el factor 2. El factor 1 no es igual que el factor 2. El factor 1 es mayor o igual que el factor 2. El factor 1 es menor o igual que el factor 2. Proceso sin condiciones (CASxx o CABxx).
Las operaciones de comparacin comprueban campos para las condiciones especificadas en las operaciones. Estas operaciones no cambian los valores de los campos. Para COMP, CABXX y CASXX, los indicadores resultantes asignados en las posiciones 71 y 76 se establecen segn los resultados de la operacin. Todos los tipos de datos pueden compararse con campos del mismo tipo de datos. Cuando utilice las operaciones de comparacin recuerde lo siguiente: v Si se comparan campos numricos, se alinean campos de longitudes diferentes en la coma decimal implicada. Los campos se rellenan con ceros a la izquierda y/o a la derecha de la coma decimal para igualar la longitud de los campos y el nmero de posiciones decimales para la comparacin. v Todas las comparaciones numricas son algebraicas. Un valor ms (+) siempre es superior que un valor menos (-). v Todas las comparaciones de tipo grfico y UCS-2 se efectan utilizando la representacin hexadecimal de los caracteres grficos. v Si se comparan campos de tipo carcter, grfico o UCS-2, los campos de longitudes diferentes se alinean por el carcter situado ms a la izquierda. El campo con la longitud menor se rellena con caracteres en blanco para igualar la longitud del campo ms largo y as igualar los longitudes de los campos para su comparacin. v Los campos de fecha se convierten a un formato comn cuando se comparan. v Los campos de hora se convierten en un formato comn cuando se comparan. v Cuando se comparan los campos de puntero de base, excepto su igualdad o desigualdad, los resultados pueden ser imprevisibles a menos que los punteros sealen hacia las direcciones del almacenamiento contiguo (por ejemplo, hacia las posiciones dentro de la misma estructura de datos, matriz o campo autnomo). v Cuando la comparacin de campos de puntero de procedimiento no se refiere a su igualdad o desigualdad, los resultados pueden ser imprevisibles. v No puede especificarse un nombre de matriz en una operacin de comparacin pero s puede especificarse un elemento de matriz. v Pueden utilizarse las operaciones ANDxx y ORxx a continuacin de DOUxx, DOWxx, IFxx y WHENxx. v Al comparar un literal de tipo carcter, grfico o UCS-2 de longitud cero con un campo (fijo o variable) que contenga blancos, la comparacin dar el resultado de iguales. Si quiere comprobar si el valor tiene longitud 0, utilice la funcin incorporada %LEN.
376
v UNLOCK (Desbloquear un rea de datos o Liberar un registro) en la pgina 556 . Si la aplicacin accede a un rea de datos de AS/400, el nombre de dicha rea de datos puede ser el nombre del rea de datos de AS/400 o un nombre que prevalezca sobre l que se haya definido utilizando el elemento de men Definir informacin de AS/400. Si desea ms informacin acerca de cmo utilizar el Diseador GUI para definir la informacin de AS/400, consulte la publicacin Iniciacin a VisualAge RPG y CODE/400. Se utilizan los estados de bloqueo siguientes:
Operacin IN con *LOCK Operacin OUT con *LOCK Un estado de bloqueo exclusivo que permite la lectura se coloca sobre el rea de datos El rea de datos permanece bloqueada despus de la operacin de grabacin
Operacin OUT con espacio en blanco El rea de datos se desbloquea despus de actualizarse UNLOCK Se desbloquea el rea de datos, se liberan los bloqueos de los registros y no se actualizan las reas de datos y/o los registros.
Cuando se trasladan datos a un rea de datos y fuera de ella, el sistema bloquea el rea de datos. Si varios usuarios estn interesados en el misma rea de datos, algn usuario puede recibir un mensaje de error indicando que el rea de datos no est disponible. Las reglas siguientes se aplican a las operaciones de rea de datos: v No se puede efectuar una operacin de rea de datos en un rea de datos que no se haya definido para el sistema operativo. v Para que una operacin de rea de datos pueda llevarse a cabo, el rea de datos debe estar especificada en la especificacin de definicin o en el cdigo de operacin DEFINE. Para obtener ms informacin, consulte el apartado DEFINE (Definicin de campo) en la pgina 428. v Un rea de datos bloqueada no puede actualizarse ni bloquearse por otro programa. v Un nombre de rea de datos no puede ser el nombre de una estructura de datos de mltiples apariciones, un campo de registro de entrada, un elemento de matriz ni una tabla. v Un rea de datos no puede ser un subcampo de una estructura de datos de mltiples apariciones, una estructura de datos de rea de datos, una estructura de datos de estado de programa, una estructura de datos de informacin de archivo (INFDS) ni una estructura de datos que aparezca en una sentencia *DTAARA DEFINE.
Operaciones de fecha
Las operaciones de fecha le permiten efectuar operaciones aritmticas de fecha y de hora, extraer partes de un campo de fecha, de hora o de indicacin de la hora; o comprobar si los campos son vlidos. Operan en campos de fecha, hora e indicacin de la hora y en campos numricos y de caracteres que representan fechas, horas e indicaciones de la hora. Las operaciones de fecha son las siguientes: v ADDDUR (Aadir duracin) en la pgina 393 v EXTRCT (Extraer fecha/hora/indicacin de la hora) en la pgina 452 v SUBDUR (Restar duracin) en la pgina 543
Captulo 25. Cdigos de operacin
377
v TEST (Comprobar fecha/hora/indicacin de la hora) en la pgina 549 Los cdigos de duracin se pueden utilizar con ADDDUR y SUBDUR. Los cdigos de duracin y sus formas abreviadas son los siguientes: v *YEARS para el ao (*Y) v *MONTHS para el mes (*M) v *DAYS para el da del mes (*D) v *HOURS para las horas (*H) v *MINUTES para los minutos (*MN) v *SECONDS para los segundos (*S) v *MSECONDS para los microsegundos (*MS).
378
Resultados inesperados
Si se efecta el redondeo en una adicin o resta de fechas y horas, lo ms probable es que un clculo de duracin ulterior d como resultado una duracin distinta de la que se aadi o rest al principio. Esto se debe a que la duracin calculada ya no va a contener una unidad completa, por lo que, al redondear hacia abajo, se obtendr una unidad menos de la esperada. Esto se muestra en los ejemplos 1 y 2, ms abajo. Puede verse un segundo caso de resultado inesperado en los ejemplos 3 y 4. Distintas fechas iniciales dan el mismo resultado despus de aadir 1 mes. Al restar un mes del resultado, es imposible volver a obtener las dos fechas iniciales.
1. '95/05/31' ADDDUR 1:*MONTH da '95/06/30' '95/06/30' SUBDUR '95/05/31' da 0 meses Poda esperarse que el resultado de SUBDUR fuese 1 mes. 2. '95/06/30' ADDDUR 1:*MONTH da '95/07/30' '95/07/30' SUBDUR '95/06/30' da 1 mes ste es el resultado "esperado". 3. '95/01/31' ADDDUR 1:*MONTH '95/01/28' ADDDUR 1:*MONTH da '95/02/28' da '95/02/28'
Dos fechas distintas dan una misma fecha resultante debido al redondeo. 4. '95/02/28' SUBDUR 1:*MONTH da '95/01/28'
Operaciones declarativas
Las operaciones declarativas son las siguientes: v DEFINE (Definicin de campo) en la pgina 428 v KFLD (Definir partes de una clave) en la pgina 462 v KLIST (Definir una clave compuesta) en la pgina 463 v PARM (Identificar parmetros) en la pgina 506 v PLIST (Identificar una lista de parmetros) en la pgina 508 v TAG (Etiqueta) en la pgina 548. Se utilizan las operaciones declarativas para declarar las propiedades de los campos o para marcar las partes de un programa. La entrada de nivel de control
Captulo 25. Cdigos de operacin
379
(posiciones 7 y 8) puede estar en blanco o puede contener una entrada para un grupo de sentencias dentro de la seccin adecuada del programa.
Operaciones de archivos
Los cdigos de las operaciones de archivos son los siguientes: v CHAIN (Recuperacin aleatoria desde un archivo) en la pgina 414 v CLOSE (Cerrar archivos) en la pgina 424 v COMMIT (Comprometer) en la pgina 425 v CLSWIN (Cerrar ventana) en la pgina 424 v DELETE (Suprimir registro) en la pgina 431 v EXCEPT (Salida en tiempo de clculo) en la pgina 448 v FEOD (Forzar fin de datos) en la pgina 453 v OPEN (Abrir archivo para proceso) en la pgina 502 v POST (Anotar) en la pgina 509 v READ (Leer un registro) en la pgina 510 v READC (Leer siguiente registro modificado) en la pgina 513 v READE (Leer clave igual) en la pgina 514 v READP (Leer registro anterior) en la pgina 516 v READPE (Leer igual anterior) en la pgina 518 v READS (Leer seleccionados) en la pgina 520 v ROLBK (Retrotraer) en la pgina 526 v SETGT (Establecer mayor que) en la pgina 532 v SETLL (Establecer lmite inferior) en la pgina 534 v SHOWWIN (Visualizar ventana) en la pgina 538 v UNLOCK (Desbloquear un rea de datos o Liberar un registro) en la pgina 556 v UPDATE (Modificar registro existente) en la pgina 557 v WRITE (Crear nuevos registros) en la pgina 561 Puede utilizar las operaciones de archivo para trabajar con archivos locales, archivos de AS/400 o con los componentes de una ventana:
Operacin CHAIN CLOSE COMMIT DELETE EXCEPT FEOD Archivo AS/400 S S S S S S S S S S S Archivo local S S Subarchivo Texto esttico S S Campo de entrada Archivos especiales
380
Operacin OPEN POST READ READC READE READP READPE READS SETGT SETLL UNLOCK UPDATE WRITE
Archivo AS/400 S S S
Archivo local S S S
Campo de entrada
Archivos especiales S
S S
S S S S S S S S S S S S S S S S S S
Cuando se utiliza un archivo descrito externamente con ciertas operaciones de archivo, puede especificarse un nombre de formato de registro, en lugar de un nombre de archivo, en el factor 2. De esta forma, el cdigo de operacin de proceso recupera y/o sita el archivo en un formato de registro del tipo especificado segn las reglas del cdigo de operacin de clculo utilizado. Las operaciones WRITE y UPDATE que especifican un nombre de archivo descrito por programa en el factor 2 deben tener un nombre de estructura de datos especificado en el campo de resultado. Las operaciones CHAIN, READ y READP que especifican un nombre de archivo descrito por programa en el factor 2 pueden tener un nombre de estructura de datos especificado en el campo de resultado. Con las operaciones CHAIN, READ y READP, los datos se transfieren directamente entre el archivo y la estructura de datos, sin procesar las especificaciones de entrada para el archivo. As pues, no se activan indicadores de campo o de identificacin de registro como resultado de una operacin de entrada en una estructura de datos. Si todas las operaciones de entrada y salida del archivo tienen una estructura de datos especificada en el campo de resultado, las especificaciones de entrada y salida no son obligatorias. Si una operacin de entrada (CHAIN, READ, READC, READE, READP, READPE) no recupera un registro porque no se ha encontrado ninguno, porque se ha producido un error en la operacin o porque ya se recuper el ltimo registro (fin del archivo), entonces no se extraen datos y todos los campos del programa permanecen sin cambios. Si especifica N como el ampliador de operacin de una operacin CHAIN, READ, READE, READP o READPE para un archivo de disco de actualizacin, se lee un registro sin bloqueo. Si no se especifica ningn ampliador de operacin, el registro se bloquea si el archivo es un archivo de disco de actualizacin. Para manejar las excepciones y los errores que se producen durante las operaciones de archivos, debe especificarse un indicador de errores o una subrutina de errores de archivo. De lo contrario, las excepciones y los errores los maneja el gestor de errores por omisin.
Captulo 25. Cdigos de operacin
381
Nota: Las operaciones de entrada y salida de subprocedimientos que incluyen especificaciones de entrada y salida siempre utilizan el nombre global, incluso aunque exista una variable local del mismo nombre. Por ejemplo, si el nombre del campo TOTALS est definido en la seccin fuente principal adems de en un subprocedimiento, cualquier operacin de entrada o salida en el subprocedimiento utilizar el campo segn la definicin de la seccin fuente principal. Consulte el apartado Soporte de valores nulos de base de datos en la pgina 128 para obtener informacin sobre el manejo de archivos con campos con posibilidad de nulos.
Operaciones de informacin
Las operaciones de informacin son las siguientes: v TIME (Hora del da) en la pgina 554. La operacin TIME permite el acceso del programa a la hora y a la fecha del sistema en cualquier momento durante la ejecucin del programa. La fecha que se recupera puede ser la del sistema local o la de un servidor AS/400.
Operaciones de inicializacin
Las operaciones de inicializacin son las siguientes: v CLEAR (Borrar) en la pgina 422 v RESET (Restablecer) en la pgina 522 Las operaciones de inicializacin proporcionan el borrado y el restablecimiento en tiempo de ejecucin de todos los elementos de una ventana (componentes de campo de entrada), estructura (formato de registro, estructura de datos, matriz o tabla) o de una variable (campo, subcampo o indicador).
382
La operacin REALLOC modifica la longitud del almacenamiento dinmico al que seala el puntero del campo del resultado. Se asigna almacenamiento nuevo y se inicializa al valor del almacenamiento antiguo. Los datos se truncan si el nuevo tamao es inferior al antiguo. Si el nuevo tamao es superior al antiguo, el almacenamiento que sigue a los datos copiados no est inicializado. El almacenamiento antiguo se libera. Se establece el puntero del campo del resultado para que seale al nuevo almacenamiento. La operacin DEALLOC libera el almacenamiento dinmico para el que se establece el puntero del campo del resultado. Si est especificado el ampliador de operacin (N), el puntero se establece a *NULL despus de una desasignacin satisfactoria. El almacenamiento se libera implcitamente al finalizar el grupo de activacin. Si se activa LR, no se liberar ningn almacenamiento dinmico que haya asignado el mdulo, pero se perdern los punteros al almacenamiento dinmico. Si no se utiliza bien el almacenamiento dinmico, pueden surgir problemas. El ejemplo siguiente ilustra un caso hipottico que se debe evitar:
D D D D Fld1 Fld2 Ptr1 Ptr2 .... S S S S 25A 5A * * BASED(Ptr1) BASED(Ptr2)
C ALLOC 25 Ptr1 C DEALLOC Ptr1 C* Despus de este punto, no debe accederse a Fld1 porque el puntero C* de base Ptr1 ya no seala al almacenamiento asignado. C C* C* C* C* C* C CALL 'SOMEPGM'
Durante la llamada anterior a 'SOMEPGM', pueden haberse realizado varias asignaciones de almacenamiento. En cualquier caso, es extremadamente peligroso realizar la asignacin siguiente, ya que 25 bytes de almacenamiento se rellenarn con 'a'. Es imposible saber para qu se est utilizando actualmente este almacenamiento. EVAL Fld1 = *ALL'a'
A continuacin se exponen ms situaciones problemticas: v Puede producirse un error parecido si se copia un puntero antes de reasignarse o desasignarse. Se ha de tener mucho cuidado al copiar punteros a almacenamiento asignado, asegurndose de que no se utilicen despus de desasignar o reasignar el almacenamiento. v Si se copia un puntero a un almacenamiento dinmico, puede utilizarse la copia para desasignar o reasignar el almacenamiento. En este caso, el puntero original no debe utilizarse hasta establecerlo a un nuevo valor. v Si un puntero a un almacenamiento dinmico se pasa como un parmetro, el procedimiento llamado podra desasignar o reasignar el almacenamiento. Despus de volver de la llamada, pueden surgir problemas si se intenta acceder al almacenamiento mediante el puntero. v Si se establece un puntero a un almacenamiento dinmico en el *INZSR, una operacin RESET posterior del puntero puede provocar que ste se establezca a un almacenamiento que ya no est asignado. v Puede surgir otro tipo de problema si se pierde un puntero a un almacenamiento dinmico (porque se ha borrado, por ejemplo, o establecido a un nuevo puntero mediante una operacin ALLOC). Una vez perdido el puntero, no podr liberarse el almacenamiento al que sealaba. Este almacenamiento no estar disponible porque no puede liberarse el
Captulo 25. Cdigos de operacin
383
almacenamiento al que apuntaba. Este almacenamiento no estar disponible para su asignacin debido a que el sistema no est informado de que el almacenamiento ya no es direccionable. El almacenamiento se liberar slo cuando finalice el grupo de activacin.
Operaciones de mensaje
La operacin de mensaje DSPLY visualiza una ventana Mensaje. Si desea ms informacin, consulte el apartado DSPLY (Visualizar ventana de mensaje) en la pgina 441.
Operaciones Mover
Las operaciones Mover son las siguientes: v MOVE (Mover) en la pgina 468 v MOVEA (Mover matriz) en la pgina 483 v MOVEL (Mover a la izquierda) en la pgina 489 Las operaciones mover transfieren todo o parte del factor 2 al campo de resultado. Si desea una descripcin de la forma en que se trasladan los datos, consulte cada operacin. Si desea obtener una descripcin de cmo se trasladan los datos de fecha y hora al utilizar MOVE y MOVEL, consulte la seccin Cmo mover los datos de fecha y hora en la pgina 386. El origen y el destino de la operacin mover pueden ser del mismo tipo o de tipos distintos, pero existen algunas restricciones: v Para los movimientos de puntero, el origen y el destino han de ser del mismo tipo, los dos punteros de base o los dos punteros de procedimiento. v Cuando se utiliza MOVEA, el origen y el destino deben ser del mismo tipo. v No se permite la operacin MOVEA para los campos de fecha, hora o indicacin de la hora. v No se permiten las operaciones MOVE y MOVEL para los campos de coma flotante o literales. El factor 2 no se modifica. Slo pueden especificarse indicadores resultantes para campos de tipo carcter, grfico, UCS-2 y de resultado numrico. En las operaciones MOVE y MOVEL no se permiten los indicadores resultantes si el campo de resultado es una matriz no indexada. En la operacin MOVEA no se permiten los indicadores resultantes si el campo de resultado es una matriz, est o no indexada. El expansor de operacin P slo puede especificarse si el campo de resultado es de tipo carcter, grfico, UCS-2 o numrico.
384
resultado (a no ser que el factor 2 sea ms corto que el campo del resultado) independientemente de que el carcter situado ms a la derecha intervenga en la operacin. Si se especifican las operaciones mover entre campos numricos, se ignoran las posiciones decimales especificadas para el campo del factor 2. Por ejemplo, si se mueve 1,00 a un campo numrico de tres posiciones con una posicin decimal, el resultado es 10,0. El factor 2 puede contener las constantes figurativas *ZEROS para traslados de campos de caracteres o numricos. Si el usuario desea lograr la misma funcin para los campos de tipo grfico, debe codificar *ALLGxx (donde xx representa ceros grficos). Cuando se mueven los datos desde un origen de tipo carcter a campos de tipo grfico, si el origen es un literal de tipo carcter, constante con nombre o *ALLm, debe tener una longitud par y 2 bytes como mnimo. Si se mueve desde un campo de tipo literal hexadecimal o *ALLx a uno de tipo grfico, el literal hexadecimal (o patrn) debe tener un nmero par de bytes. Cuando un campo de caracteres est involucrado en un movimiento desde/hacia un campo de tipo grfico, el campo de origen debe tener una longitud par y 2 bytes como mnimo. Cuando se utilizan operaciones de mover para convertir datos de tipo carcter a UCS-2 y viceversa, el nmero de caracteres movidos es variable, ya que los datos de tipo carcter pueden o no contener caracteres grficos. Por ejemplo, cinco caracteres UCS-2 pueden convertirse a: v Cinco caracteres de un solo byte v Cinco caracteres de byte doble v Una combinacin de caracteres de un solo byte y doble Si los datos resultantes tienen una longitud superior a la del campo de resultado, los datos se truncarn. Si el resultado es un carcter de un solo byte, es responsabilidad del usuario garantizar que el resultado contenga caracteres completos. Si se especifica el ampliador de operacin P para una operacin mover, el campo del resultado se rellena a partir de la derecha para MOVEL y MOVEA, y a partir de la izquierda para MOVE. Los caracteres de relleno son los siguientes: v Espacio en blanco para carcter v Espacios en blanco de doble byte para grfico v Espacios en blanco UCS-2 para UCS-2 v 0 (cero) para numrico v 0 para indicador Se realiza el relleno despus de la operacin. Si se utiliza MOVE o MOVEL para mover un campo a una matriz, se rellenar cada elemento de la matriz. Si se utilizan estas operaciones para mover una matriz a una matriz y el resultado contiene ms elementos que la matriz del factor 2, tendr lugar el mismo relleno pero no afectar a los elementos adicionales. Una operacin MOVEA con un nombre de matriz en el campo del resultado rellenar el ltimo elemento afectado por la operacin adems de todos los elementos ulteriores. Cuando se especifican indicadores resultantes para operaciones de traslado, el campo del resultado determina el indicador a activar. Si el campo del resultado es
Captulo 25. Cdigos de operacin
385
un campo de tipo carcter, grfico o UCS-2, slo puede especificarse el indicador resultante en las posiciones 75 y 76. Este indicador se activa si el campo del resultado slo tiene espacios en blanco. Cuando el campo del resultado es numrico, se pueden utilizar las tres posiciones del indicador resultante. Estos indicadores se activan de la forma siguiente: Superior (71-72) Se activa si el campo del resultado es superior a 0. Inferior (73-74) Se activa si el campo del resultado es inferior a 0. Igual (75-76) Se activa si el campo del resultado es igual a 0.
386
Las reglas siguientes aplican al factor 2: v Los caracteres separadores deben ser vlidos para el formato especificado. v Si el factor 2 no es una representacin vlida de una fecha o de una hora, o si su formato no coincide con el formato especificado en el factor 1, se genera un error. v Si el factor 2 contiene UDATE o *DATE, el factor 1 es opcional y se corresponde con la palabra clave DATEDIT de las especificaciones de cabecera. v Si el factor 2 contiene UDATE y la entrada del factor 1 est codificada, debe tener un formato de fecha con un ao de 2 dgitos. Si el factor 2 contiene *DATE y el factor 1 est codificado, debe tener un formato de fecha con un ao de 4 dgitos. El campo del resultado debe ser una variable de fecha, hora, indicacin de la hora, numrica o de caracteres. Puede ser un campo, una matriz, un elemento de matriz o un nombre de tabla. La fecha o la hora se sitan en el campo del resultado segn el formato definido en ste o segn el cdigo de formato especificado en el factor 1. Si el campo del resultado es numrico, se eliminarn los caracteres separadores antes de la operacin. La longitud es la longitud despus de eliminar los caracteres separadores. Cuando se mueve desde un campo de fecha a un campo de indicacin de la hora, la hora y la parte de microsegundos de la indicacin de la hora no se ven afectadas, aunque se comprueba la indicacin de la hora entera y se generar un mensaje de error si no es vlida. Al trasladarse desde un campo de hora a un campo de indicacin de la hora, la parte de microsegundos de la indicacin de la hora se establecer en 000000. La parte de fecha no se ve afectada, pero se comprueba la indicacin de la hora entera y se generar un error cuando no sea vlida. Si los datos de caracteres o numricos son ms largos de lo necesario, slo se utilizarn los datos situados ms a la izquierda (ms a la derecha para la operacin MOVE). Recuerde que el factor 1 determina la longitud de los datos a mover. Por ejemplo, si el formato del factor 1 es *MDY para una operacin MOVE desde una fecha numrica, slo se utilizarn los 6 dgitos situados ms a la derecha del factor 2. Slo puede especificarse el ampliador de operacin P si el resultado es de tipo carcter o numrico.
387
* Definir campos de caracteres de 8 bytes. D CHR_8a s 8a inz('95/05/21') D CHR_8b s 8a inz('abcdefgh') * * Definir dos campos de fecha de 8 bytes. Para tener un ao de 2 * dgitos en lugar de 4 (formato *ISO), se definen con un formato * de fecha con aos de 2 dgitos, *YMD. Para D_8a, tambin se * especifica un separador (.). El formato del literal de fecha * especificado con la palabra clave INZ debe ser el mismo que el * especificado en la especificacin de control *. En este caso, no * se especifica ninguno, por lo que toma por omisin *ISO. * D D_8a s d datfmt(*ymd.) D D_8b s d inz(d'1995-07-31') datfmt(*ymd) * * Definir un campo de fecha de 10 bytes. Por omisin tiene formato *ISO D D_10 s d inz(d'1994-06-10') * * Mover el campo de 8 caracteres al campo de fecha D_10. * Contendr la fecha inicializada en CHR_8a, pero con un ao * de cuatro dgitos y el formato de D_10, es decir, * 1995-05-21 (formato *ISO). * * Un formato debe especificarse en el factor 1 para indicar el * formato del campo de caracteres. * C *YMD MOVE CHR_8a D_10 *
Mover la fecha de 10 caracteres al campo CHR_8b de 8 caracteres. Contendr la fecha que acaba de pasarse a D_10, pero con un ao de 2 dgitos y el separador por omisin indicado por el formato *YMD del factor 1. *YMD MOVE D_10 CHR_8b
Mover la fecha de 10 caracteres al campo de fecha D_8a de 8. Contendr la fecha que acaba de pasarse a D_10, pero con un ao de 2 dgitos y un separador ., ya que se ha definido D_8a con el formato *YMD. MOVE D_10 D_8a
Mover la fecha de 8 caracteres a la fecha D_10 de 10. Contendr la fecha incializada en D_8b, pero con un ao de 4 dgitos, 1995-07-31.
MOVE D_8b D_10 * * Tras el ltimo movimiento, los campos contendrn * D_10: 1995-05-21 * CHR_8b: 95/05/21 * D_8a: 95.05.21 * D_10: 1995-07-31 * C SETON
LR
388
El siguiente ejemplo muestra cmo convertir un campo de caracteres con el formato CYYMMDD a un campo de fecha con el formato *ISO. Esto es particularmente til cuando se utilizan parmetros de mandato de tipo *DATE.
CMD PARM PROMPT('Utilizar parmetro DATE') KWD(DATE) TYPE(*DATE)
Figura 168. Fragmento del programa de proceso de mandato RPG IV para este mandato.
Operaciones de serie
Las operaciones de serie son las siguientes: v CAT (Concatenar dos series) en la pgina 411 v CHECK (Comprobar caracteres) en la pgina 417 v CHECKR (Comprobacin inversa) en la pgina 419 v SCAN (Buscar serie) en la pgina 527 v SUBST (Subserie) en la pgina 546 v XLATE (Convertir) en la pgina 564 Las operaciones de serie incluyen concatenacin, bsqueda, subserie, conversin y verificacin. Las operaciones de serie slo se pueden utilizar en campos de tipo carcter, grfico o UCS-2. Nota: v Las series se indexan a partir de la posicin 1. v No se pueden utilizar constantes figurativas en el factor 1, en el factor 2 ni en los campos de resultado. v No se permite solapado en una estructura de datos para el factor 1 y el campo del resultado o para el factor 2 y el campo del resultado. Cuando se utilizan operaciones de serie en campos de tipo grfico, todos los datos del factor 1, del factor 2 y del campo del resultado deben ser grficos. Cuando se especifican valores numricos para la longitud, la posicin inicial y el nmero de espacios en blanco para caracteres grficos, los valores representan caracteres de doble byte. Cuando se utilizan operaciones de serie en campos de tipo UCS-2, todos los datos del factor 1, del factor 2 y del campo del resultado deben ser UCS-2. Cuando se
389
especifican valores numricos para la longitud, la posicin inicial y el nmero de espacios en blanco para caracteres UCS-2, los valores representan caracteres de doble byte. Cuando se utilizan operaciones de serie en la parte de grfico de los datos de caracteres de modalidad mixta, la posicin inicial, la longitud y el nmero de espacios en blanco representan caracteres de un byte. Nota: Es responsabilidad del usuario conservar la integridad de los datos.
En la operacin ENDyy, yy puede ser: yy CS DO FOR IF Significado Fin de la operacin CASxx. Fin de la operacin DO, DOUxx y DOWxx. Fin de la operacin FOR. Fin de la operacin IFxx.
390
SL Blancos
Nota: En la operacin ENDyy, yy es opcional. Si un grupo estructurado, en este caso un grupo hacer, contiene otro grupo estructurado completo, juntos forman un grupo estructurado jerarquizado. Los grupos estructurados se pueden jerarquizar hasta una profundidad mxima de 10 niveles. A continuacin se proporciona un ejemplo de grupos estructurados jerarquizados con una profundidad de tres niveles:
DO DO ENDDO IFxx SELECT WHENxx ENDSL ELSE ENDIF ENDDO
Recuerde lo siguiente al especificar grupos estructurados: v Cada grupo estructurado jerarquizado debe estar completamente contenido dentro del grupo estructurado de nivel superior. v Cada grupo estructurado debe contener una de las operaciones DO, DOUxx, DOWxx, FOR, IFxx o SELECT y su operacin ENDyy asociada. v La bifurcacin de un grupo estructurado externo al mismo puede provocar resultados no deseables.
Operaciones de subrutina
Las operaciones de subrutina son las siguientes: v BEGACT (Empezar subrutina de accin) en la pgina 397 v ENDACT (Fin de subrutina de accin) en la pgina 444 v BEGSR (Empezar subrutina de usuario) en la pgina 400 v ENDSR (Fin de subrutina de usuario) en la pgina 445 v EXSR (Invocar subrutina de usuario) en la pgina 449 v CASxx (Invocar subrutina condicionalmente) en la pgina 409 v LEAVESR (Abandonar una subrutina) en la pgina 465 Una subrutina es un grupo de especificaciones de clculo en un programa que puede procesarse varias veces en dicho programa. Las especificaciones de subrutina deben ir a continuacin de todas las dems operaciones de clculo que se puedan procesar para un programa; sin embargo, las operaciones PLIST, PARM, KLIST, KFLD y DEFINE pueden especificarse entre una operacin ENDSR (el fin de una subrutina) y una operacin BEGSR (el principio de otra subrutina) o despus de todas las subrutinas. Se puede llamar a una subrutina utilizando una operacin EXSR o CASxx en cualquier lugar de las especificaciones de clculo. Las lneas de subrutina pueden identificarse por SR en las posiciones 7 y 8. Las nicas entradas vlidas en las posiciones 7 y 8 de una lnea de subrutina son SR, AN, OR o blancos.
391
Para obtener informacin acerca de cmo codificar una subrutina, vea Codificacin de subrutinas de usuario en la pgina 450.
Operaciones de comprobacin
Las operaciones de comprobacin son las siguientes: v TEST (Comprobar fecha/hora/indicacin de la hora) en la pgina 549 v TESTB (Comprobar bit) en la pgina 551 v TESTN (Comprobar numrico) en la pgina 553 v TESTZ (Comprobar zona) en la pgina 554 El resultado de estas operaciones se indica mediante los indicadores resultantes.
Operaciones de GUI
Las operaciones de VisualAge RPG son las siguientes: v BEGACT (Empezar subrutina de accin) en la pgina 397 v CLSWIN (Cerrar ventana) en la pgina 424 v DSPLY (Visualizar ventana de mensaje) en la pgina 441 v ENDACT (Fin de subrutina de accin) en la pgina 444 v GETATR (Recuperar atributo) en la pgina 455 v READS (Leer seleccionados) en la pgina 520 v SETATR (Establecer atributo) en la pgina 531 v SHOWWIN (Visualizar ventana) en la pgina 538 v START (Iniciar un componente lgico o Llamar a programa local) en la pgina 541 v STOP (Detener un componente lgico) en la pgina 542 Las operaciones de VisualAge RPG operan en la interfaz de usuario de la aplicacin (por ejemplo, SHOWWIN) o en componentes de la operacin (por ejemplo, STOP). Vea cada operacin para una explicacin de su funcin.
ADD (Aadir)
Cdigo ADD (H) Factor 1 Sumando Factor 2 Sumando Campo de resultado Suma Indicadores + Z
Si se especifica el factor 1, la operacin ADD lo suma al factor 2 y coloca el resultado en el campo del resultado. Si no se especifica el factor 1, el contenido del factor 2 se suma al campo del resultado y la suma se coloca en el campo del resultado. El factor 1 y el factor 2 deben ser numricos y pueden contener uno de los siguientes: una matriz, un elemento de matriz, una constante, un nombre de campo, un literal, un subcampo o un nombre de tabla. En el apartado Operaciones aritmticas en la pgina 367 se describen las normas generales para la especificacin de operaciones aritmticas.
392
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* Se suma el valor 1 a RECNO. C ADD 1 RECNO C* Se suma el contenido de EHWRK y CURHRS. C ADD EHWRK CURHRS C* Los contenidos de OVRTM y REGHRS se suman y colocan juntos C* en TOTPAY. C OVRTM ADD REGHRS TOTPAY
Fecha/Hora _
La operacin ADDDUR aade la duracin especificada en el factor 2 a una fecha u hora y coloca en el campo del resultado la Fecha, Hora o Indicacin de la Hora resultante. Si se especifica el factor 1, debe contener un campo, subcampo, matriz, elemento de matriz, literal o constante de Fecha, Hora o Indicacin de la Hora. Si el factor 1 contiene un nombre de campo, una matriz o un elemento de matriz, su tipo de datos debe ser el mismo tipo de datos del campo especificado en el campo del resultado. Si no se especifica el factor 1, la duracin se aade al campo especificado en el campo del resultado. El factor 2 debe contener dos subfactores. El primero es una duracin y puede ser un campo, un elemento de matriz o una constante numrica con cero posiciones decimales. Si la duracin es negativa, se resta de la fecha. El segundo subfactor debe ser un cdigo de duracin vlido que indique el tipo de duracin. El cdigo de duracin debe ser coherente con el tipo de datos del campo de resultado. Se puede aadir un ao, un mes o un da a un campo de fecha. No se puede aadir una duracin de un minuto a un campo de fecha. Operaciones de fecha en la pgina 377 describe los cdigos de duracin. El campo de resultado debe ser un campo, matriz o elemento de matriz del tipo de datos de fecha, hora o indicacin de la hora. Si el factor 1 se encuentra en blanco, la duracin se aade al valor del campo de resultado. Si el campo del resultado es una matriz, el valor del factor 2 se aade a cada elemento de la matriz. Si el campo del resultado es un campo de hora, el resultado siempre ser una hora vlida. Por ejemplo, aadir 59 minutos a 23:59:59 da 24:58:59. Como esta hora no es vlida, el compilador la ajusta a 00:59:59. Cuando a una fecha se le aade una duracin expresada en meses, la regla general es que la parte de mes se incrementa en el nmero de meses de la duracin y la parte de da no se modifica. La excepcin a esta regla es cuando la parte de da resultante sobrepasa el nmero real de das del mes resultante. En este caso, la parte de da resultante se ajusta a la fecha real del fin de mes. Los ejemplos siguientes (que presuponen un formato *YMD) ilustran este punto.
Captulo 25. Cdigos de operacin
393
La parte de mes resultante se ha incrementado en 1; la parte de da resultante se ha ajustado porque el mes de junio slo tiene 30 das. Se producen resultados parecidos cuando se aade la duracin de un ao. Por ejemplo, si aadimos un ao a 92/02/29 obtenemos 93/02/28, ajustando el valor porque el ao resultante no es bisiesto. Si desea obtener ms informacin, consulte la seccin Operaciones de gestin de memoria en la pgina 382. Se produce un error cuando se da una de las condiciones siguientes: v El valor del campo Fecha, Hora o Indicacin de la hora en el factor 1 no es vlido v El factor 1 est en blanco y el valor del campo de resultado antes de la operacin no es vlido v Se ha producido un desbordamiento o un subdesbordamiento (es decir, el valor resultante es mayor que *HIVAL o menor que *LOVAL). En una situacin de error, v Se seala un error (cdigo de estado 112 113). v Se activa el indicador de error (columnas 73-74), si se ha especificado, o se establece que la funcin incorporada %ERROR devuelva 1, si se ha especificado el ampliador E. v El valor del campo de resultado permanece inalterado. Para manejar las excepciones con los cdigos de estado de programa 112 113, puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48. El sistema establece un lmite de 15 dgitos para las duraciones. Aadir una duracin con ms de 15 dgitos significativos provocar un error o un truncamiento. Esto se puede evitar limitando el primer subfactor del Factor 2 a 15 dgitos.
394
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... HKeywords+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ H TIMFMT(*USA) DATFMT(*MDY&) DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D* DDateconst C CONST(D'12 31 92') D* D* Define e inicializa un campo de Fecha D* DLoandate S D DATFMT(*EUR) INZ(D'12 31 92') DDuedate S D DATFMT(*ISO) Dtimestamp S Z Danswer S T CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* Determina DUEDATE que es xx aos, yy meses, zz das ms tarde C* que LOANDATE. C LOANDATE ADDDUR XX:*YEARS DUEDATE C ADDDUR YY:*MONTHS DUEDATE C ADDDUR ZZ:*DAYS DUEDATE C* Determina la fecha 23 das ms tarde C* C ADDDUR 23:*D DUEDATE C* Aade 1234 microsegundos a una indicacin de la hora C* C ADDDUR 1234:*MS timestamp C* Aade 12 HRS y 16 minutos a la medianoche C* C T'00:00 am' ADDDUR 12:*Hours answer C ADDDUR 16:*Minutes answer C* Resta 30 das a la fecha de vencimiento de un prstamo C* C ADDDUR -30:*D LOANDUE
La operacin ALLOC asigna almacenamiento en el rea de almacenamiento dinmico por omisin de la longitud especificada en el factor 2. El puntero del campo del resultado se establece para que seale al nuevo almacenamiento dinmico. El almacenamiento no est inicializado. El factor 2 debe ser numrico con cero posiciones decimales. Puede ser un literal, constante, campo autnomo, subcampo, nombre de tabla o elemento de matriz. El valor ha de estar comprendido entre 1 y 16776704. Si el valor no pertenece a este intervalo en tiempo de ejecucin, se producir un error con el estado 00425. Si no se ha podido asignar el almacenamiento, se producir un error con el estado 426. Si se producen estos errores, el puntero del campo de resultado permanecer inalterado.
Captulo 25. Cdigos de operacin
395
El campo del resultado debe ser una variable escalar de puntero de base (un campo autnomo, subcampo de estructura de datos, nombre de tabla o elemento de matriz). Para manejar las excepciones con los cdigos de estado del programa 425 426, puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48. Si desea obtener ms informacin, consulte la seccin Operaciones de gestin de memoria en la pgina 382.
D Ptr1 D Ptr2 C C * * * * S S * *
ALLOC 7 Ptr1 * Ahora el Ptr1 seala a 7 bytes de almacenamiento ALLOC (E) 12345678 Ptr2
sta es una gran cantidad de almacenamiento y puede no estar disponible algunas veces. Si no ha podido asignarse el almacenamiento, %ERROR devolver '1', el estado del programa se establece en 00426 y %STATUS devolver 00426.
ANDxx (Y)
Cdigo ANDxx Factor 1 Comparando Factor 2 Comparando Campo de resultado Indicadores
La operacin ANDxx debe ir inmediatamente despus de una de las siguientes operaciones: v ANDxx v DOUxx v DOWxx v IFxx v ORxx v WHENxx Con ANDxx, puede especificar una condicin compleja para las operaciones DOUxx, DOWxx, IFxx y WHENxx. La operacin ANDxx tiene prioridad sobre la operacin ORxx. Consulte la Figura 173 en la pgina 397 para ver un ejemplo. El factor 1 y el factor 2 deben contener un literal, una constante con nombre, una constante figurativa, un nombre de tabla, un elemento de matriz, un nombre de estructura de datos o un nombre de campo. El factor 1 y el factor 2 deben ser del mismo tipo. Por ejemplo, un campo de caracteres no puede compararse con un numrico. La comparacin de los factores 1 y 2 sigue las mismas normas dadas para las operaciones de comparacin.
396
Operaciones de comparacin en la pgina 375 y Operaciones de programacin estructuradas en la pgina 390 describen las normas para la especificacin de la operacin ANDxx.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* Si ACODE es igual a A y el indicador 50 est activado, se procesan C* las operaciones MOVE y WRITE. C ACODE IFEQ 'A' C *IN50 ANDEQ *ON C MOVE 'A' ACREC C WRITE RCRSN C* Si no se dieron las condiciones anteriores pero ACODE es igual a A, C* el indicador 50 est desactivado, y ACREC es igual a D, se procesa C* la operacin MOVE siguiente. C ELSE C ACODE IFEQ 'A' C *IN50 ANDEQ *OFF C ACREC ANDEQ 'D' C MOVE 'A' ACREC C ENDIF C ENDIF
La operacin BEGACT define el inicio de una subrutina de accin. Cuando se produce un evento para un componente, se llama a la subrutina de accin. El factor 1 contiene el nombre del componente. El factor 2 contiene el nombre del evento. El campo de resultado contiene el nombre de la ventana que contiene el componente.
Captulo 25. Cdigos de operacin
397
Se utiliza el Diseador GUI para crear la subrutina de accin y para enlazar la subrutina de accin con al menos una combinacin ventana/componente/evento. El nombre de la subrutina de accin se crea utilizando el factor 1, factor 2 y el campo de resultado. Cada entrada est separada de las otras por un carcter ms (+). La tabla siguiente muestra ejemplos de enlaces creados utilizando el Diseador GUI:
Tabla 39. Subrutinas de accin de nico enlace y de mltiples enlaces
Ventana INVENTORY INVENTORY INVENTORY ADDPART INVENTORY INVENTORY ADDPART Componente PSB0001 PSB0004 PSB0005 PSB0008 PSB0002 PSB0002 PSB0009 Evento PRESS PRESS PRESS PRESS PRESS MOUSEMOVE MOUSEMOVE Subrutina de accin PSB0001+PRESS+INVENTORY SETCOLORS PSB0005+PRESS+INVENTORY SETCOLORS PSB0002++INVENTORY PSB0002++INVENTORY PSB0009+MOUSEMOVE
Los siguientes ejemplos ilustran cmo se crea un nombre de subrutina de accin mediante la informacin descrita en la Tabla 39.
398
CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++++ C PSB0001 BEGACT PRESS INVENTORY C PSB0005 BEGACT PRESS INVENTORY
Figura 176. Nombre de la subrutina de accin - Factor 1, factor 2 y campo del resultado
399
utilizar el Diseador GUI para crear y enlazar subrutinas de accin, consulte la publicacin Iniciacin a VisualAge RPG y CODE/400.
La operacin BEGSR identifica el inicio de una subrutina de usuario. El factor 1 debe contener una nombre simblico exclusivo o una de las palabras clave siguientes: *TERMSR, *PSSR o *INZSR. Si especifica un nombre de subrutina, debe especificar el mismo nombre en el factor 2 de la operacin EXSR que hace referencia a la subrutina o en el campo del resultado de la operacin CASxx que hace referencia a la subrutina. Si especifica una palabra clave, slo se puede definir una subrutina mediante estas palabras clave: v *TERMSR especifica una subrutina que se ha de ejecutar durante la terminacin normal. v *PSSR especifica que es una subrutina de excepcin/error del programa para manejar excepciones/errores detectados en el programa. v *INZSR especifica una subrutina que se ha de ejecutar durante la inicializacin. EXSR (Invocar subrutina de usuario) en la pgina 449 describe cmo invocar subrutinas.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq... C Extended-factor2++++++++++++++++++++++++++++ C* C *TERMSR BEGSR C . C . C . C ENDSR
Nota: Cuando haga referencia a los componentes de una subrutina, tenga en cuenta lo siguiente: Todas las subrutinas de usuario se consideran subrutinas de accin de mltiples enlaces. En la ejecucin, la ventana o evento por omisin para las subrutinas de usuario son la ventana o evento por omisin de la subrutina de accin que llama a la subrutina de usuario, directamente o a travs de otras subrutinas de usuario.
La operacin BITOFF hace que se desactiven los bits identificados en el factor 2 (se establecen a 0) en el campo de resultado. Los bits no identificados en el factor 2
400
permanecen inalterados. Cuando se utiliza BITOFF para dar formato a un carcter, debe utilizarse tanto BITON como BITOFF: BITON especifica los bits que se han de activar (establecer en 1) y BITOFF especifica los bits que se han de desactivar (establecer en 0). Si no se activan o desactivan explcitamente todos los bits del carcter, es posible que no se obtenga el carcter que se desea. El factor 2 puede contener: v Nmeros de bit 0-7: Pueden desactivarse de 1 a 8 bits por operacin. Se identifican por los nmeros del 0 al 7 (0 es el bit situado ms a la izquierda). Encierre los nmeros de bit entre apstrofes. Por ejemplo, para desactivar los bits 0, 2 y 5, entre 025 en el factor 2. v Nombre de campo: Especifique en el factor 2 el nombre de un campo, un elemento de tabla o un elemento de matriz de caracteres de una posicin. Los bits que se encuentran activados en el campo, elemento de tabla o elemento de matriz, se desactivan en el campo del resultado; los bits que se encuentran desactivados no afectan al resultado. v Literal o constante con nombre hexadecimal: Especifique un literal o constante con nombre hexadecimal de 1 byte. Los bits que se encuentran activos en el factor 2 se desactivan en el campo de resultado; los bits que se encuentran desactivados no quedan afectados. v Constante con nombre: Especifique una constante de caracteres con nombre, de un mximo de ocho posiciones de longitud, que contenga los nmeros de bit que se han de desactivar. En el campo de resultado, especifique un campo de caracteres de una posicin. Puede ser un elemento de matriz si todos los elementos de la matriz son campos de caracteres de una posicin. Vea en la Figura 179 en la pgina 402 un ejemplo de operaciones BITOFF y BITON. Si desea asignar un patrn de bit en particular a un campo de caracteres, utilice la operacin MOVE con un literal hexadecimal en el factor 2.
La operacin BITON hace que se activen los bits identificados en el factor 2 (se establecen a 1) en el campo de resultado. Los bits no identificados en el factor 2 permanecen inalterados. Cuando se utiliza BITON para dar formato a un carcter, debe utilizarse tanto BITON como BITOFF:: BITON especifica los bits que se han de activar (establecer en 1) y BITOFF especifica los bits que se han de desactivar (establecer en 0). A menos de que active o desactive explcitamente todos los bits en el carcter, puede que no obtenga el carcter deseado. El factor 2 puede contener: v Nmeros de bit 0-7: Pueden activarse de 1 a 8 bits por operacin. Se identifican por los nmeros del 0 al 7 (0 es el bit situado ms a la izquierda). Encierre los nmeros de bit entre apstrofes. Por ejemplo, para activar los bits 0, 2 y 5, entre 025 en el factor 2. v Nombre de campo: Puede especificar en el factor 2 el nombre de un campo, un elemento de tabla o un elemento de matriz de caracteres de una posicin. Los
401
bits que se encuentran activados en el campo, elemento de tabla o elemento de matriz, se activan en el campo del resultado; los bits que se encuentran desactivados no quedan afectados. v Literal o constante con nombre hexadecimal: Puede especificar un literal hexadecimal de 1 byte. Los bits que se encuentran activos en el factor 2 se activan en el campo de resultado; los bits que se encuentran desactivados no afectan al resultado. v Constante con nombre: Puede especificar una constante de caracteres con nombre, de un mximo de ocho posiciones de longitud, que contenga los nmeros de bit que se han de activar. En el campo de resultado, especifique un campo de caracteres de una posicin. Puede ser un elemento de matriz si todos los elementos de la matriz son campos de caracteres de una posicin. Vea en la Figura 179 un ejemplo de operaciones BITOFF y BITON.
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D BITNC C '01234567' D HEXNC C X'0F' CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* Los valores de los bits son: C* Antes de las operaciones: Tras las operaciones: C* C* C* C* C* C* C* C* C* C C C C C C C C FieldA FieldB FieldC FieldD FieldE FieldG FieldH FieldI = = = = = = = = 00000000 00000000 11111111 11000000 11000000 11111111 00000000 11001010 FieldA FieldB FieldC FieldD FieldE FieldG FieldH FieldI '04567' '3' '3' '3' '01' '0' BITNC HEXNC = = = = = = = = 10001111 00010000 11111111 11010000 11000001 01111111 00001110 00001111 FieldA FieldB FieldC FieldD FieldH FieldG FieldI FieldI
Si desea asignar un patrn de bit en particular a un campo de caracteres, utilice la operacin MOVE con un literal hexadecimal en el factor 2.
La operacin CABxx compara el factor 1 con el factor 2. Si se cumple la condicin especificada por xx, el programa bifurca a la operacin TAG o ENDSR asociada con la etiqueta especificada en el campo de resultado. De lo contrario, el programa contina con la siguiente operacin de la secuencia. Si el campo de resultado no
402
est especificado, los indicadores de resultado se establecen de acuerdo a ello y el programa contina con la siguiente operacin de la secuencia. Operaciones de comparacin en la pgina 375 describe los distintos valores para xx. El factor 1 y el factor 2 deben contener un literal, una constante con nombre, una constante figurativa, un nombre de tabla, un elemento de matriz, un nombre de estructura de datos o un nombre de campo. El factor 1 y el factor 2 deben ser del mismo tipo. Una operacin CABxx en el procedimiento principal puede especificar una bifurcacin a una lnea de una especificacin anterior o subsiguiente. Una operacin CABxx en un subprocedimiento puede especificar una bifurcacin: v Desde una lnea del cuerpo del subprocedimiento a otra lnea del cuerpo del subprocedimiento v Desde una lnea de una subrutina a otra lnea de la misma subrutina v Desde una lnea de una subrutina a una lnea del cuerpo del subprocedimiento La operacin CABxx no puede especificar una bifurcacin desde fuera de una subrutina a una operacin TAG o ENDSR dentro de dicha subrutina. La etiqueta especificada en el campo del resultado ha de estar asociada a una operacin TAG exclusiva y debe tener un nombre simblico exclusivo. Los indicadores resultantes son opcionales. En caso de especificarse, se establecen para reflejar el resultado de la operacin de comparacin. Por ejemplo: v HI se activa cuando el factor 1 es mayor que el factor 2 v LO se activa cuando el factor 1 es menor que el factor 2 v EQ se activa cuando el factor 1 y el factor 2 son iguales.
403
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* Los valores del campo son: C* FieldA = 100,00 C* FieldB = 105,00 C* FieldC = ABC C* FieldD = ABCDE C* C* Bifurcar a TAGX. C FieldA CABLT FieldB TAGX C* C* Bifurcar a TAGX. C FieldA CABLE FieldB TAGX C* C* Bifurcar a TAGX; indicador 16 desactivado. C FieldA CABLE FieldB TAGX 16 C* C* Bifurcar a TAGX; indicador 17 desactivado, indic. 18 activado. C FieldA CAB FieldB TAGX 1718 C* C* Bifurcar a TAGX; indicador 19 activado. C FieldA CAB FieldA TAGX 19 C* C* No hay bifurcacin. C FieldA CABEQ FieldB TAGX C* C* No hay bifurcacin; indicador 20 activado. C FieldA CABEQ FieldB TAGX 20 C* C* No hay bifurcacin; indicador 21 desactivado. C FieldC CABEQ FieldD TAGX 21 C : C TAGX TAG
La operacin CALL pasa el control a un programa AS/400 representado por el nombre de programa especificado en el factor 2. El factor 2 debe ser el nombre de una especificacin de definicin que defina el nombre del programa que se ha de llamar. El nombre del programa puede ser un nombre de AS/400 (opcionalmente calificado con la biblioteca) o bien un nombre que prevalezca sobre l, que se haya definido utilizando el elemento de men Definir informacin de AS/400. Si desea ms informacin acerca de cmo utilizar el Diseador GUI para definir la informacin de AS/400, consulte la publicacin Iniciacin a VisualAge RPG y CODE/400. Si se ha especificado el campo de resultado, debe contener el nombre de una PLIST para comunicar valores entre el programa de llamada y el programa llamado. El campo de resultado puede estar en blanco si el programa llamado no accede a parmetros o si las sentencias PARM siguen inmediatamente a la operacin CALL.
404
Los parmetros asociados con una operacin CALL para un programa AS/400 tienen las siguientes restricciones: v Los parmetros no pueden contener punteros. Si un parmetro contiene un puntero, el compilador genera un mensaje de error en el momento de la compilacin. v Una estructura de datos no puede tener campos no de caracteres que se solapen. Los campos solapados deben ser de caracteres. v El paso del valor *HIVAL (XFF) como parmetro de tipo carcter o grfico puede producir resultados imprevistos. v Los programas con llamadas remotas que pasen un campo de caracteres que no pueda convertirse a EBCDIC produce la detencin de la conversin. Normalmente, esto se produce cuando un campo numrico solapa un campo de caracteres. v Puede especificar un mximo de 25 parmetros. v El nmero total de bytes asignados para los parmetros no puede exceder de 32K. Si se especifica un indicador de resultado en las posiciones 73 y 74, se activa cuando se produce un error durante la operacin CALL. Para manejar las excepciones de CALL (cdigos de estado de programa 202, 211 231), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... DName+++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++++++++ D Functions-cont++++++++++++++++++++ D D*Constante con nombre D Remote1 C CONST('PROG1') D LINKAGE(*SERVER) NOWAIT D* D*Campo autnomo D Remote2 S 13A INZ('MYLIB/REMPROG') D LINKAGE(*SERVER) D parm1 S 8P 2 D parm2 DS D name 1 20A D first 1 8A D last 9 20A CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq C* CALL a un programa remoto C* C CALL Remote1 90 C PARM parm1 C PARM parm2 C* C* Llamada remota C* C CALL Remote2 PLIST1 90 C* C* C* C PLIST1 PLIST C PARM Fld1 10 2 C PARM Charfld 50
405
406
PGM PARM(&SESS) /*-------------------------------------------------------*/ /* */ /* DECLARAR VARIABLES DE TRABAJO */ /* */ /*-------------------------------------------------------*/ DCL VAR(&JOBN) TYPE(*CHAR) LEN(10) DCL VAR(&SESS) TYPE(*CHAR) LEN(10) DCL VAR(&SUB) TYPE(*CHAR) LEN(2) DCL VAR(&STS) TYPE(*DEC) LEN(5 0) DCL &ITLEN TYPE(*DEC) VALUE(2) DCL &ITPTR TYPE(*DEC) LEN(5 0) DCL VAR(&SUBFIX) TYPE(*CHAR) LEN(40) + VALUE('A B C D E F G H I J G0G1G2G3G4G5G6G7G8G9') RTVJOBA JOB(&JOBN) /*-------------------------------------------------------*/ /* BUSCAR EL POSIBLE NOMBRE DE DISPOSITIVO Y */ /* COMPROBAR SI UNO DE ELLOS TIENE LA PANTALLA DE */ /* INICIO DE SESIN */ /*-------------------------------------------------------*/ CHGVAR &ITPTR 1 LOOP1: IF (&ITPTR *GT 40) THEN(DO) CHGVAR &SESS VALUE('NO VLIDO GOTO END ENDDO CHGVAR CHGVAR RTVCFGSTS MONMSG IF (&STS CHGVAR GOTO END: ENDPGM
')
VAR(&SUB) VALUE(%SST(&SUBFIX &ITPTR &ITLEN)) VAR(&SESS) VALUE(&JOBN *TCAT &SUB) CFGD(&SESS) CFGTYPE(*DEV) STSCDE(&STS) MSGID(CPF9801) = 50) THEN(GOTO END) &ITPTR (&ITPTR + &ITLEN) LOOP1
Utilice CALLB para llamar a una funcin Windows. Las funciones son nombres exportados de bibliotecas de enlace dinmico (DLL) que se enlazan con la aplicacin VisualAge RPG cuando se compila la aplicacin. Para obtener ms informacin acerca de cmo compilar una aplicacin que llama a una funcin C de Windows, consulte la publicacin Iniciacin a VisualAge RPG y CODE/400. El factor 2 debe contener un nombre de procedimiento o un puntero a un procedimiento que contenga la direccin de la funcin que se ha de llamar.
Captulo 25. Cdigos de operacin
407
El nombre del procedimiento es sensible a las maysculas y minsculas. Esto significa que el nombre que se entra en el factor 2 debe coincidir en las maysculas y minsculas con la funcin que se llama. El nombre del procedimiento debe tener 255 caracteres o menos. Si el nombre tiene ms de 255 caracteres, se truncar a 255. Si el factor 2 contiene un puntero a un procedimiento, se borra *ROUTINE de PSDS y se rellena con blancos. Si el factor 2 contiene un literal o constante con nombre, *ROUTINE de PSDS contiene los ocho primeros dgitos del nombre del procedimiento. Si se especifica el campo del resultado, debe contener un nombre PLIST. Si se especifica un indicador de resultado en las posiciones 73 y 74, se activa cuando se produce un error durante la operacin CALLB. Para manejar las excepciones de CALLB (cdigos de estado de programa 202, 211 231), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48. Debe utilizarse el convenio de enlace __cdecl, en la funcin llamada. Nota: El compilador VisualAge RPG utiliza este convenio de enlace para los subprocedimientos VARPG. Consulte la publicacin Programacin con VisualAge para RPG para obtener ejemplos acerca de cmo utilizar la operacin CALLB.
La operacin CALLP se utiliza para llamar a programas locales o procedimientos con prototipo en la estacin de trabajo. Este es el modo recomendado de llamar a los programas. CALLP puede llamar a un archivo EXE, BAT, COM o DOS EXE. No se permiten parmetros UCS-2. A diferencia de las dems operaciones de llamada, CALLP utiliza una sintaxis de formato libre. Se utiliza la entrada del factor 2 ampliado para especificar el nombre del prototipo del programa o procedimiento llamado, as como tambin los parmetros que se han de pasar. (Se parece al modo de llamar a una funcin incorporada.) Se permite un mximo de 255 parmetros para una llamada a un programa y un mximo de 399 para una llamada a un procedimiento. El compilador utiliza entonces el nombre del prototipo para obtener un nombre externo, si es necesario, para la llamada. Si se especifica la palabra clave CLTPGM en el prototipo, la llamada ser una llamada dinmica externa; de lo contrario, ser una llamada a un procedimiento. Se ha de incluir un prototipo del programa o procedimiento al que se est llamando en las especificaciones de definicin que preceden a la operacin CALLP.
408
Observe que si CALLP se utiliza para llamar a un procedimiento que devuelve un valor, ste no estar disponible para el llamador. Si se requiere el valor, llame al procedimiento prototipo desde dentro de una expresin. Cuando se utiliza la palabra clave CLTPGM en el prototipo, no puede haber ningn valor de retorno y los parmetros se han de pasar por valor. Para obtener informacin sobre cmo definir un programa local y para las normas para pasar parmetros, consulte el Captulo 18. Especificaciones de definicin en la pgina 227. Para obtener informacin acerca de procedimientos, subprocedimientos y cmo realizar prototipos, consulte el Captulo 6. Subprocedimientos y prototipos en la pgina 59. Consulte la publicacin Programacin con VisualAge para RPG para obtener informacin acerca de como llamar a los programas y utilizar varios procedimientos. Si desea obtener informacin acerca de cmo utilizar los ampliadores de operacin M y R, consulte la seccin Reglas de precisin para operaciones numricas en la pgina 358. Nota: Los programas que se llaman utilizando CALLP completan su ejecucin antes de que se ejecuten las sentencias posteriores a CALLP. En el ejemplo siguiente, se pasa el parmetro fld1 al programa pgm1.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... DName+++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++++++++ D Functions-cont++++++++++++++++++++ D pgm1 PR CLTPGM('testprog') D fld1 20A VALUE CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq C* C CALLP pgm1(fld1) 90
La operacin CASxx se utiliza para seleccionar una subrutina condicionalmente para su proceso. La seleccin est basada en la relacin entre el factor 1 y el factor 2, como xx lo especifica. Si existe la relacin denotada por xx entre el factor 1 y el factor 2, se procesa la subrutina especificada en el campo del resultado. Si no existe, el programa contina con la siguiente operacin CASxx del grupo CAS. Si desea ver una lista de valores de xx, consulte Operaciones de comparacin en la pgina 375. Un grupo CAS slo puede contener operaciones CASxx. Una operacin ENDCS debe seguir a la ltima operacin CASxx. Despus de procesarse la subrutina, el programa contina con la operacin que sigue a la operacin ENDCS, a menos que la subrutina pase el control a una operacin diferente. Si se especifican el factor 1 y el factor 2, pueden contener un literal, una constante con nombre, una constante figurativa, un nombre de campo, un nombre de tabla, un elemento de matriz, un nombre de estructura de datos o espacios en blanco.
Captulo 25. Cdigos de operacin
409
Tanto el factor 1 como el factor 2 deben ser del mismo tipo de datos. Los espacios en blanco slo son vlidos si xx est en blanco y no se han especificado indicadores de resultado. El campo resultante debe contener el nombre de una subrutina de usuario o una de las siguientes palabras clave: *TERMSR, *PSSR o *INZSR: v *TERMSR especifica una subrutina que se ha de ejecutar durante la terminacin normal. v *PSSR especifica que es una subrutina de excepcin/error del programa para manejar excepciones/errores detectados en el programa. v *INZSR especifica una subrutina que se ha de ejecutar durante la inicializacin. Se pueden especificar indicadores de condicin para la operacin CASxx, sin embargo, no se pueden especificar indicadores de condicin en la operacin ENDCS para un grupo CAS. En una operacin CASbb, el factor 1 y el factor 2 slo son necesarios si se han especificado los indicadores de resultado en las posiciones 71 a 76. La operacin CASbb sin ningn indicador de resultado especificado en las posiciones comprendidas entre 71 y 76 tiene una funcin idntica a la de la operacin EXSR, porque provoca la ejecucin incondicional de la subrutina nombrada en el campo del resultado de la operacin CASbb. Cualquier operacin CASxx que siga a una operacin CASbb incondicional en el mismo grupo CAS no se comprueba nunca. Por lo tanto, la colocacin normal de la operacin CASbb incondicional es despus de todas las dems operaciones CASxx del grupo CAS. Si se especifican indicadores de resultado, se establecen como se indica a continuacin: v Superior: (71-72) El factor 1 es mayor que el factor 2. v Inferior: (73-74) El factor 1 es menor que el factor 2. v Igual: (75-76) El factor 1 es igual al factor 2.
410
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* La operacin CASGE compara FieldA con FieldB. Si FieldA es C* mayor o igual que FieldB, se procesa Subr01 y el C* programa contina con la operacin posterior a ENDCS. C* C FieldA CASGE FieldB Subr01 C* C* Si FieldA no es mayor o igual que FieldB, el programa C* compara FieldA con FieldC. Si FieldA es igual a FieldC, C* se procesa SUBR02 y el programa contina con la operacin C* siguiente a la operacin ENDCS. C* C FieldA CASEQ FieldC Subr02 C* C* Si FieldA no es igual que FieldC, la operacin CAS hace que Subr03 C* se procese antes de que el programa contine con la operacin C* siguiente a la operacin ENDCS. C* La sentencia CAS se utiliza para proporcionar una subrutina si C* no se ha realizado ninguna de las operaciones CASxx anteriores. C* C CAS Subr03 C* C* La operacin ENDCS indica el final del grupo CAS. C* C ENDCS
La operacin CAT concatena la serie especificada en el factor 2 al final de la serie especificada en el factor 1 y la coloca en el campo de resultado. Las series origen y destino deben ser del mismo tipo, o bien todo caracteres, o bien todo grficos o bien todo UCS-2. Si se especifica el factor 1, debe contener una serie que puede ser un nombre de campo, un elemento de matriz, una constante con nombre, un nombre de estructura de datos, un nombre de tabla o un literal. Si no se especifica el factor 1, el factor 2 se concatena con el fin de la serie del campo de resultado. Nota: En la siguiente descripcin de la operacin CAT, las referencias al factor 1 se aplican al campo de resultado si no se ha especificado el factor 1. El factor 2 debe contener una serie y puede contener el nmero de espacios en blanco que se insertarn entre las series concatenadas. Su formato es la serie seguida de dos puntos (:) y del nmero de espacios en blanco. Los blancos tienen el formato de los datos. Por ejemplo, en los datos de tipo carcter, un blanco es x20, mientras que en los datos UCS-2 es x0020. Si se concatenan series grficas, los espacios en blanco son de doble byte. La parte de serie puede contener un nombre de campo, un elemento de matriz, una constante con nombre, un nombre de estructura de datos, un nombre de tabla, un literal o un nombre de subcampo
Captulo 25. Cdigos de operacin
411
de estructura de datos. El nmero de espacios en blanco debe ser numrico con cero posiciones decimales y puede contener una constante con nombre, un elemento de matriz, un literal, un nombre de tabla o un nombre de campo. Si se especifican dos puntos, debe especificarse el nmero de espacios en blanco. Si no se especifican los dos puntos, la concatenacin se produce con los blancos de cola, si los hay, del factor 1, o con el campo de resultado si no se especifica el factor 1. Si se especifica el nmero de blancos (N), el factor 1 se copia al campo de resultado ajustado por la izquierda. Si no se especifica el factor 1, se utiliza la serie de campo del resultado. Los N espacios en blanco se aaden a continuacin del ltimo carcter que no est en blanco. El factor 2 se aade, entonces, a este resultado. Los espacios en blanco de gua del factor 2 no se contabilizan cuando se aaden N espacios en blanco al resultado; slo se consideran parte del factor 2. Si no se especifica el nmero de espacios en blanco, los blancos de cola y de gua del factor 1 y el factor 2 se incluyen en el resultado. El campo del resultado debe ser una serie y puede contener un nombre de campo, un elemento de matriz, un nombre de estructura de datos o un nombre de tabla. Su longitud debe ser la del factor 1 y el factor 2 combinadas ms los espacios en blanco existentes; si no es as, se produce truncamiento por la derecha. Un ampliador de operacin P indica que el campo de resultado debe rellenarse por la derecha con espacios en blanco despus de producirse la concatenacin si el campo de resultado es mayor que el resultado de la operacin. Si no se especifica el relleno, slo queda afectada la parte situada ms a la izquierda del campo. En el tiempo de ejecucin, si el nmero de espacios en blanco es menor que cero, el compilador toma el valor por omisin cero como nmero de espacios en blanco. No se pueden utilizar constantes figurativas en el factor 1, en el factor 2 ni en los campos de resultado. No se permite el solapamiento en las estructuras de datos para el factor 1 y el campo de resultado o para el factor 2 y el campo de resultado. En el apartado Operaciones de serie en la pgina 389 se describen las normas generales para la especificacin de operaciones de serie.
412
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* CAT concatena LAST a NAME e inserta un blanco tal como se especifica C* en el factor 2. TEMP contiene 'Mr.bSmith'. C MOVE 'Mr. ' NAME 6 C MOVE 'Smith ' LAST 6 C NAME CAT LAST:1 TEMP 9 C* C* CAT concatena 'OS' a STRING y coloca 'OSXX' en TEMP. C MOVE 'XX' STRING 2 C 'OS' CAT STRING TEMP 4 C* C* El siguiente ejemplo es igual que el anterior excepto en que C* TEMP se define como un campo de 10 bytes. El ampliador de operacin P C* especifica que se utilizarn espacios en blanco en las posiciones de la C* derecha del campo de resultado que el resultado de la concatenacin, C* 'OSXX', no rellene. Como resultado, TEMP contendr 'OSXXbbbbbb' C* despus de la concatenacin. C MOVE *ALL'*' TEMP 10 C MOVE 'XX' STRING 2 C 'OS' CAT(P) STRING TEMP C* *...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* El ejemplo siguiente muestra espacios en blanco de gua del factor 2. C* Despus de CAT, RESULT contiene 'MR.bSMITH'. C* C MOVE 'MR.' NAME 3 C MOVE ' SMITH' FIRST 6 C NAME CAT FIRST RESULT 9 C* C* El ejemplo siguiente muestra la utilizacin de CAT sin el factor 1. C* FLD2 es una serie de 9 caracteres. Antes de la concatenacin, C* contiene 'ABCbbbbbb'. FLD1 contiene 'XYZ'. Despus de la C* concatenacin FLD2 contendr 'ABCbbXYZb'. C* C MOVEL(P) 'ABC' FLD2 9 C MOVE 'XYZ' FLD1 3 C CAT FLD1:2 FLD2
413
La operacin CHAIN recupera un registro desde un archivo controlado en clculo (F en la posicin 18 de las especificaciones de descripcin de archivo) o un subarchivo, activa un indicador de identificacin de registro (si se ha indicado en las especificaciones de entrada) y coloca los datos del registro en los campos de entrada.
414
coloca en la estructura de datos. Consulte el apartado Operaciones de archivos en la pgina 380 para obtener informacin sobre la transferencia de datos entre el archivo y la estructura de datos. Si el archivo especificado en el factor 2 es un archivo DISK de entrada AS/400, no se permite ningn ampliador de operacin. Todos los registros se leen sin bloqueos. Si el archivo especificado en el factor 2 es un archivo UPDATE AS/400 y si no se especifica el ampliador de operacin N, la operacin CHAIN bloquea el registro. El registro permanece bloqueado hasta que: v El registro se actualiza v El registro se suprime v Se lea otro registro del archivo para su entrada o actualizacin v Se ejecute un SETLL o SETGT en el archivo v Se realice una operacin UNLOCK en el archivo v Se realice en el archivo una operacin de salida definida en una especificacin de salida sin nombres de campos. Las operaciones de salida que aaden un registro a un archivo no hacen que desaparezca el bloqueo del registro. Puede especificar un indicador en las posiciones 71-72 que se active si ningn registro del archivo coincide con el argumento de bsqueda. Esta informacin tambin puede obtenerse de la funcin incorporada %FOUND, que devuelve 0 si no se ha encontrado ningn registro y 1 si se ha encontrado alguno. Para manejar las excepciones de CHAIN (cdigos de estado de archivo mayores que 1000), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones/errores de archivo en la pgina 37. Las posiciones 75 y 76 deben estar en blanco. Cuando la operacin CHAIN es satisfactoria, el archivo se sita de manera que una operacin de lectura posterior recupere el registro que de forma lgica sigue o precede al registro recuperado. Cuando la operacin CHAIN no se completa satisfactoriamente, los campos del programa permanecen sin cambios y el archivo debe volverse a situar para que pueda realizarse la siguiente operacin de lectura sobre el archivo. Si se actualiza el archivo inmediatamente despus de una operacin CHAIN satisfactoria, se actualiza el ltimo registro recuperado. Si no se encuentra ningn registro, si se produce un error durante la operacin CHAIN o si ya se ha recuperado el ltimo registro (fin de archivo), no se recupera ningn dato y todos los campos permanecen sin cambios.
415
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* La operacin CHAIN recupera el primer registro del archivo, C* FILEX, que tiene un campo clave con el mismo valor que el C* argumento de bsqueda KEY (factor 1). C* C KEY CHAIN RECX C* C* C* Si no se encuentra un registro con un valor de clave igual al C* argumento de bsqueda, %FOUND devuelve '0' y la operacin EXSR C* se procesa. Si se encuentra un registro con un valor de clave C* igual al argumento de bsqueda, el programa contina con los C* clculos despus de la operacin EXSR. C* C IF NOT %FOUND C EXSR Not_Found C ENDIF
Figura 187. Operacin CHAIN con un nombre de formato de registro y sin bloqueo
416
Para poder actualizar o suprimir un registro de un componente de subarchivo, ste debe estar situado en el registro. *START y *END no se pueden utilizar con un componente de subarchivo. Los valores de los campos del componente de subarchivo se asignan a los valores del programa correspondiente para los campos de subarchivo. El programa puede modificar dichos valores.
La operacin CHECK verifica que cada carcter de la serie base (factor 2) se encuentra entre los caracteres indicados en la serie del comparador (factor 1). La serie base y la serie del comparador deben ser del mismo tipo, ambas del tipo carcter, grfico o UCS-2. (Los tipos grfico y UCS-2 deben tener el mismo valor de CCSID.) La verificacin empieza por el carcter ms a la izquierda del factor 2 y contina carcter por carcter, de izquierda a derecha. Cada carcter de la serie base se compara con los caracteres del factor 1. Si existe una coincidencia de un carcter en el factor 2 y el factor 1, se verifica el siguiente carcter de la serie base. Si no se encuentran coincidencias, se coloca un valor entero en el campo del resultado para indicar la posicin del carcter incorrecto. La operacin detiene la comprobacin cuando encuentra el primer carcter incorrecto o el final de la serie base. Si no se encuentran caracteres incorrectos, el campo de resultado se establece a cero. El factor 1 debe ser una serie y puede contener un nombre de campo, un elemento de matriz, una constante con nombre, un nombre de estructura de datos, un subcampo de estructura de datos, un literal o un nombre de tabla. El factor 2 debe contener la serie base, o la serie base seguida de dos puntos y, a continuacin, la posicin de inicio. La serie base debe contener un nombre de campo, un elemento de matriz, una constante con nombre, un nombre de estructura de datos, un literal o un nombre de tabla. La posicin inicial debe ser numrica sin posiciones decimales, y puede ser una constante con nombre, un elemento de matriz, un nombre de campo, un literal o un nombre de tabla. Si no se especifica ninguna posicin de inicio, se utiliza el valor 1. Si la posicin de inicio es mayor que 1, el valor del campo de resultado es relativo a la posicin ms a la izquierda de la serie base, sin tener en cuenta la posicin de inicio. Si se especifica un campo de resultado, ste puede ser una variable numrica, un elemento de matriz numrica, un nombre de tabla numrica o una matriz numrica. Si el campo de resultado no se especifica, es necesario especificar el indicador de encontrado en las posiciones 75 y 76. No utilice posiciones decimales en el campo de resultado. Si el campo de resultado es una matriz, la operacin contina la comprobacin despus de encontrar el primer carcter incorrecto tantas veces como elementos de matriz existan. Si hay ms elementos de matriz que caracteres incorrectos, todos los elementos restantes toman el valor cero. Si se utilizan datos de tipo grfico o UCS-2, el campo de resultado contendr posiciones de carcter grfico (esto es, la posicin 3, el tercer carcter grfico, ser la posicin de carcter 5).
417
Para manejar las excepciones de CHECK (cdigo de estado del programa 100), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48. Puede especificar un indicador en las posiciones 75-76 que se active si se encuentran caracteres incorrectos. Tambin puede obtener esta informacin desde la funcin incorporada %FOUND, que devuelve 1 si se encuentran caracteres incorrectos. No se pueden utilizar constantes figurativas en el factor 1, en el factor 2 ni en los campos de resultado. No se permite el solapamiento de la estructura de datos del factor 1 y el campo de resultado, o del factor 2 y el campo de resultado. En el apartado Operaciones de serie en la pgina 389 se describen las normas generales para la especificacin de operaciones de serie.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D* Despus del ejemplo siguiente, N=6 y el indicador de bsqueda 90 D* est activado. Debido a que la posicin de inicio es 2, el primer carcter no numrico que se D* encuentra es '.'. D* D D Digits C '0123456789' CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C C MOVE '$2000.' Salario C Dgitos CHECK Salario:2 N 90 C* C C MOVE '$2000.' Salario C Dgitos CHECK Salario:2 N C IF %FOUND C EXSR NonNumeric C ENDIF C* C* C* Debido a que el factor 1 es un espacio en blanco, CHECK indica la C* posicin del primer carcter que no es un espacio en blanco. Si C* STRING contiene ' the', NUM contendr el valor 4. C* C C ' ' CHECK String Num 2 0 *...1....+....2....+....3....+....4....+....5....+....6....+....7... . . .
418
. . . DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D* El ejemplo siguiente comprueba que FIELD contiene slo las letras D* A a J. Como resultado, ARRAY=(136000) tras la operacin CHECK. D* El indicador 90 se activa. D* D D Letter C 'ABCDEFGHIJ' D CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C C MOVE '1A=BC*' Field 6 C Letter CHECK Field Array 90 C C* C* En el ejemplo siguiente, debido a que FIELD contiene slo las C* letras A a J, ARRAY=(000000). El indicador 90 se desactiva. C* C C MOVE 'FGFGFG' Field 6 C Letter CHECK Field Array 90 C C
La operacin CHECKR verifica si cada carcter de la serie base est entre los caracteres indicados en la serie del comparador. La serie base y la serie del comparador deben ser del mismo tipo, ambas del tipo carcter, grfico o UCS-2. (Los tipos grfico y UCS-2 deben tener el mismo valor de CCSID.). La verificacin
Captulo 25. Cdigos de operacin
419
empieza en el carcter situado ms a la derecha del factor 2 y contina, carcter a carcter, de derecha a izquierda. Cada carcter de la serie base se compara con los caracteres del factor 1. Si existe una coincidencia del carcter del factor 2 en el factor 1, se verifica el siguiente carcter de origen. Si no se encuentran coincidencias, se coloca un valor entero en el campo del resultado para indicar la posicin del carcter incorrecto. Aunque la comprobacin se realiza desde la derecha, la posicin situada en el campo de resultado ser relativa a la izquierda. El factor 1 debe ser una serie y puede contener un nombre de campo, un elemento de matriz, una constante con nombre, un nombre de estructura de datos, un subcampo de estructura de datos, un literal o un nombre de tabla. El factor 2 debe contener la serie base, o la serie base seguida de dos puntos y, a continuacin, la posicin de inicio. La serie base debe contener un nombre de campo, un elemento de matriz, una constante con nombre, un nombre de estructura de datos, un nombre de subcampo de estructura de datos, un literal o un nombre de tabla. La posicin inicial debe ser numrica sin posiciones decimales, y puede ser una constante con nombre, un elemento de matriz, un nombre de campo, un literal o un nombre de tabla. Si no se especifica ninguna posicin de inicio, se utiliza la longitud de la serie. Si se especifica un campo de resultado, ste puede ser una variable numrica, un elemento de matriz numrica, un nombre de tabla numrica o una matriz numrica. Si el campo de resultado no se especifica, es necesario especificar el indicador de encontrado en las posiciones 75 y 76. El valor en el campo de resultado es relativo a la posicin situada ms a la izquierda de la serie origen, independientemente de la posicin de inicio. No utilice posiciones decimales en el campo de resultado. Si el campo de resultado es una matriz, la operacin contina la comprobacin despus de encontrar el primer carcter incorrecto tantas veces como elementos de matriz existan. Si hay ms elementos de matriz que caracteres incorrectos, todos los elementos restantes toman el valor cero. Si el campo de resultado no es una matriz, la operacin detiene la comprobacin al encontrar el primer carcter incorrecto o al encontrar el final de la serie base. Si no se encuentran caracteres incorrectos, el campo de resultado se establece a cero. Si se utilizan datos de tipo grfico o UCS-2, el campo de resultado contendr posiciones de carcter grfico (esto es, la posicin 3, el tercer carcter grfico, ser la posicin de carcter 5). Para manejar las excepciones de CHECKR (cdigo de estado de programa 100), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48. Puede especificar un indicador en las posiciones 75-76 que se active si se encuentran caracteres incorrectos. Tambin puede obtener esta informacin desde la funcin incorporada %FOUND, que devuelve 1 si se encuentran caracteres incorrectos. No se pueden utilizar constantes figurativas en el factor 1, en el factor 2 ni en los campos de resultado. No se permite el solapamiento en las estructuras de datos para el factor 1 y el campo de resultado o para el factor 2 y el campo de resultado.
420
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* Como el factor 1 est en blanco, CHECKR indica la posicin del primer C* carcter distinto a blanco. Esta utilizacin de CHECKR le permite C* determinar la longitud de una cadena. Si STRING C* contiene 'ABCDEF ', NUM contendr el valor 6. C* Si se produce un error, %ERROR devolver '1' y C* %STATUS devolver el cdigo de estado 00100. C* C C ' ' CHECKR(E) String Num C C SELECT C WHEN %ERROR C ... se ha producido un error C WHEN %FOUND C ... NUM es menor que la longitud de la serie C ENDIF C* *...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D* D* Tras el ejemplo siguiente, N=1 y el indicador de encontrado 90 D* est activado. Como la posicin inicial es 5, la operacin D* empieza con el 0 situado ms a la derecha y el primer carcter no D* numrico encontrado es '$'. D* D Digits C '0123456789' D D*
421
CLEAR (Borrar)
Cdigo CLEAR CLEAR Factor 1 *NOKEY Factor 2 *ALL Campo de resultado Estructura o Variable Ventana o subarchivo Indicadores
La operacin CLEAR establece en blanco o en cero lo siguiente, segn el tipo de datos: v Elementos de una estructura (formatos de registro, estructuras de datos, matrices, tablas) v Variables (campos, subcampos, indicadores) v Componentes de campos de entrada de una ventana v Subarchivos
422
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D* D D DS1 DS D Num 2 5 0 D Char 20 30A D D MODS DS OCCURS(2) D Fld1 1 5 D Fld2 6 10 0 D CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* En el ejemplo siguiente, CLEAR establece todos los subcampos de C* la estructura de datos DS1 a sus valores por omisin, CHAR a C* blancos, NUM a cero. C C CLEAR DS1 C C* C* En el ejemplo siguiente, CLEAR establece todas las apariciones de C* la estructura de datos de apariciones mltiples MODS a sus valores C* por omisin, Fld1 a blancos, Fld2 a cero. C C CLEAR *ALL MODS C
423
La operacin CLOSE cierra uno o varios archivos. El archivo no se puede volver a utilizar a menos que se especifique una operacin OPEN para dicho archivo. El archivo puede ser un archivo local o un archivo AS/400. Una operacin CLOSE sobre un archivo previamente cerrado no produce un error. El factor 2 debe contener el nombre del archivo que se ha de cerrar o la palabra clave *ALL. *ALL cierra todos los archivos a la vez. El factor 2 no puede contener un archivo de matriz o de tabla (se identifica con una T en la posicin 18 de las especificaciones de descripcin de archivo). Para manejar las excepciones de CLOSE (cdigos de estado de archivo mayores que 1000), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones/errores de archivo en la pgina 37. Las posiciones 71, 72, 75 y 76 deben estar en blanco.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* La operacin CLOSE explcita cierra FILEB. C C CLOSE FILEB C C* La operacin CLOSE *ALL cierra todos los archivos del programa. C* Debe especificar una operacin OPEN explcita para los archivos C* que desee volver a utilizar. Si la operacin CLOSE no se completa C* satisfactoriamente, %ERROR devuelve '1'. C C CLOSE (E) *ALL C
La operacin CLSWIN cierra una ventana y la elimina de la pantalla. Se genera un evento Destroy para la ventana. La ventana debe estar definida en la aplicacin. El factor 2 contiene el nombre de la ventana que se ha de cerrar. Para manejar las excepciones de CHECKR puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener
424
ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq... C Extended-factor2++++++++++++++++++++++++++++ C* C* Se cierra una ventana denominada UPDCUST. C CLSWIN 'UPDCUST'
COMMIT (Comprometer)
Cdigo COMMIT (E) Factor 1 Factor 2 Campo de resultado Indicadores _ ER _
La operacin COMMIT procesa un grupo de cambios en la base de datos de AS/400 como una unidad. Los cambios asociados con la unidad pueden retrotraerse mediante la operacin ROLBK. La operacin COMMIT slo puede utilizarse con archivos de AS/400. No se puede utilizar con archivos locales. Para abrir un archivo de base de datos de AS/400 para control de compromiso, especifique COMMIT en la especificacin de descripcin del archivo. Slo los archivos abiertos bajo el control de compromiso se ven afectados por la operacin COMMIT, sin tener en cuenta el componente que ha emitido dicha operacin. La operacin COMMIT no modifica la posicin del archivo. Se liberan todos los bloqueos de los registros para los archivos bajo control de compromiso. Slo se puede iniciar un entorno de control de compromiso en un servidor AS/400. Se pueden utilizar estos archivos en otros servidores AS/400, sin embargo, no se puede trabajar con ellos bajo control de compromiso. El control de compromiso finaliza cuando la aplicacin termina. Si hay cambios pendientes en la base de datos de AS/400 que no se han comprometido ni retrotrado explcitamente, se retrotraern cuando la aplicacin termina. Antes de ejecutar una operacin bajo un entorno de control de compromiso, debe utilizarse el Diseador GUI para definir el nivel de compromiso. Si desea ms informacin acerca de cmo utilizar el Diseador GUI para definir la informacin de AS/400, consulte la publicacin Iniciacin a VisualAge RPG y CODE/400. Para manejar las excepciones de COMMIT (cdigos de estado de programa 802 a 805), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Por ejemplo, se produce un error si el control de compromiso no est activo. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48.
425
COMP (Comparar)
Cdigo COMP Factor 1 Comparando Factor 2 Comparando Campo de resultado Indicadores HI LO EQ
La operacin COMP compara el factor 1 con el factor 2. El factor 1 y el factor 2 deben contener un literal, una constante con nombre, un nombre de campo, un nombre de tabla, un elemento de matriz, una estructura de datos o una constante figurativa. El factor 1 y el factor 2 deben tener el mismo tipo de datos. No especifique el mismo indicador para las tres condiciones. Una vez especificados, los indicadores resultantes se activan o desactivan para reflejar los resultados de la comparacin. Como resultado de la comparacin, los indicadores se activan de la forma siguiente: v Superior: (71-72) El factor 1 es mayor que el factor 2. v Inferior: (73-74) El factor 1 es menor que el factor 2. v Igual: (75-76) El factor 1 es igual al factor 2. En el apartado Operaciones de comparacin en la pgina 375 se describen las normas generales para la especificacin de operaciones de comparacin.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* Los valores iniciales de los campos son: C* FLDA = 100.00 C* FLDB = 105.00 C* FLDC = 100.00 C* FLDD = ABC C* FLDE = ABCDE C* C* El indicador 12 est activado; los indicadores 11 y 13 estn C* desactivados. C FLDA COMP FLDB 111213 C* C* El indicador 15 est activado; el indicador 14 est desactivado. C FLDA COMP FLDB 141515 C* C* El indicador 18 est activado; el indicador 17 est desactivado. C FLDA COMP FLDC 171718 C* C* El indicador 21 est activado; los indicadores 20 y 22 estn C* desactivados. C FLDD COMP FLDE 202122
426
La operacin DEALLOC libera una asignacin anterior de almacenamiento dinmico. El campo del resultado de la operacin DEALLOC es un puntero que ha de contener el valor que ha establecido anteriormente una operacin de asignacin de almacenamiento dinmico (puede ser una operacin ALLOC en RPG o algn otro mecanismo de asignacin de almacenamiento dinmico). No es suficiente sealar simplemente al almacenamiento dinmico; se ha de establecer que el puntero seale al principio de una asignacin. El almacenamiento al que seala el puntero se libera para una asignacin ulterior que pueda realizar este programa o cualquier otro del grupo de activacin. Si est especificado el ampliador de operacin N, el puntero se establece a *NULL despus de una desasignacin satisfactoria. Para manejar las excepciones de DEALLOC (cdigo de estado de programa 426), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. El puntero del campo de resultado no se modificar si se produce un error, incluso aunque se especifique N. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48. El campo del resultado debe ser una variable escalar de puntero de base (un campo autnomo, subcampo de estructura de datos, nombre de tabla o elemento de matriz). No se obtiene ningn error en el momento de la ejecucin si el puntero ya es *NULL. Si desea obtener ms informacin, consulte la seccin Operaciones de gestin de memoria en la pgina 382.
427
D Ptr1 S * D Fld1 S 1A D BasedFld S 7A BASED(Ptr1) C* Se asignan 7 bytes del almacenamiento dinmico y se establece C* que el puntero Ptr1 seale a dicho almacenamiento. C ALLOC 7 Ptr1 C* C* La operacin DEALLOC libera el almacenamiento. Este almacenamiento C* est disponible para su asignacin por este programa o cualquier C* otro programa del grupo de activacin. (Observe que la asignacin C* siguiente no necesariamente volver a obtener el mismo almacenamiento). C DEALLOC Ptr1 C* Ptr1 seala an al almacenamiento desasignado, pero no debe utilizarse C* este puntero con su valor actual. No es vlido cualquier intento de C* acceder a BasedFld que se base en el puntero Ptr1. C* C EVAL Ptr1 = %addr(Fld1) C* C* No es vlida la operacin DEALLOC porque el puntero se ha establecido C* a la direccin de almacenamiento de programa. Se establece que %ERROR C* devuelva '1', el estado del programa se establece en 00426 (%STATUS C* devuelve 00426) y no se modifica el puntero. C DEALLOC(E) Ptr1 C* C* Se vuelve a asignar y desasignar almacenamiento. Debido a que est C* especificado el ampliador de operacin (N), el puntero Ptr1 tiene C* el valor *NULL despus de la operacin DEALLOC. C ALLOC 7 Ptr1 C DEALLOC(N) Ptr1
Utilice la operacin DEFINE para definir un campo basndose en los atributos (longitud y posiciones decimales) de otro campo o para definir un campo con un rea de datos de AS/400. Los indicadores de condicionamiento (posiciones 9 a 11) no estn permitidos.
428
El campo de resultado contiene el nombre del campo que se define. No puede ser una matriz, un elemento de matriz ni un nombre de tabla. Puede utilizar las posiciones 64 a 68 (longitud de campo) para hacer que la entrada del campo de resultado sea ms larga o ms corta que la entrada del factor 2. La posicin 64 puede contener un signo ms (+) para indicar un aumento de la longitud de campo o un signo menos () para indicar una reduccin de la longitud de campo. Las posiciones 65 a 68 pueden contener el aumento o reduccin de la longitud (ajustado a la derecha) o pueden estar en blanco. La entrada de longitud de campo slo se permite para campos de tipo grfico, UCS-2,, numricos y carcter. Para campos de tipo grfico o UCS-2, la diferencia de longitud de campo se calcula en caracteres de doble byte. Si las posiciones 64 a 68 estn en blanco, la entrada del campo del resultado se define con la misma longitud que la entrada del factor 2. Nota: No puede modificar el nmero de posiciones decimales del campo que se define. Si el factor 2 es un campo de tipo grfico o UCS-2, el campo de resultado se definir con el mismo tipo, esto es, como grfico o UCS-2. El nuevo campo tendr el CCSID grfico o UCS-2 por omisin. Si desea que el nuevo campo tenga el mismo CCSID que el campo del factor 2, utilice la palabra clave LIKE en una especificacin de definicin. El ajuste de longitud se expresa en bytes dobles. Vea ejemplos de *LIKE DEFINE en la Figura 197 en la pgina 431.
429
v Una estructura de datos de mltiples apariciones ni el nombre de un subcampo de una estructura de datos de mltiples apariciones. v Una estructura de datos que aparezca en otra sentencia *DTAARA DEFINE v El nombre de rea de datos de la palabra clave DTAARA de la especificacin de definicin v Un campo de registro de entrada v Una matriz v Un elemento de matriz v Una tabla Nota: Si el campo de resultado es una estructura de datos del rea de datos que contiene un subcampo decimal empaquetado, el rea de datos de AS/400 debe contener un valor decimal empaquetado vlido que se haya inicializado. En las reas de datos numricas, la longitud mxima es de 24 dgitos con 9 lugares decimales. Tenga en cuenta que existe un mximo de 15 dgitos a la izquierda de los lugares decimales, aunque el nmero de decimales sea inferior a 9. Puede utilizar las posiciones 64 a 70 para definir la longitud y el nmero de posiciones decimales para el campo de resultado. Debe coincidir con la descripcin externa del rea de datos especificada en el factor 2. Vea ejemplos de *DTAARA DEFINE en la Figura 197 en la pgina 431.
430
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... * C* FLDA es un campo de caracteres de 7 posiciones. C* FLDB es un campo de 5 dgitos con 2 posiciones decimales. C* C* C* FLDP es un campo de caracteres de 7 posiciones. C *LIKE DEFINE FLDA FLDP C* C* FLDQ es un campo de caracteres de 9 posiciones. C *LIKE DEFINE FLDA FLDQ +2 C* C* FLDR es un campo de caracteres de 6 posiciones. C *LIKE DEFINE FLDA FLDR - 1 C* C* FLDS es un campo numrico de 5 posiciones con 2 posiciones decimales. C *LIKE DEFINE FLDB FLDS C* C* FLDT es un campo numrico de 6 posiciones con 2 posiciones decimales. C *LIKE DEFINE FLDB FLDT + 1 C* C* FLDU es un campo numrico de 3 posiciones con 2 posiciones decimales. C *LIKE DEFINE FLDB FLDU - 2 C* C* FLDX es un campo numrico de 3 posiciones con 2 posiciones decimales. C *LIKE DEFINE FLDU FLDX *...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* Los atributos (longitud y posiciones decimales) del C* rea de datos (TOTGRS) deben ser los mismos que los del C* rea de datos externos. C C *DTAARA DEFINE TOTGRS 10 2 C C* C* La entrada de campo de resultado (TOTNET) es el nombre del rea de C* datos a utilizar dentro del programa VRPG. La entrada del factor 2 C* (TOTAL) es el nombre del rea de datos tal como se ha definido en el C* sistema. C C *DTAARA DEFINE TOTAL TOTNET C
La operacin DELETE suprime un registro. Cuando se ha suprimido un registro, no puede volverse a recuperar.
431
Si no se especifica el factor 1, la operacin DELETE suprime el registro actual. El registro actual es el ltimo registro recuperado. El registro debe haber sido bloqueado por una operacin de entrada anterior como, por ejemplo, una operacin CHAIN o READ. Si se especifica el factor 1, debe contener una clave, un nmero relativo de registro o un nmero de ndice de subarchivo que identifique el registro a suprimir: v Si el acceso es por clave, el factor 2 debe ser un archivo remoto AS/400. El factor 1 debe ser un nombre de campo, una constante con nombre o un literal. Si existen registros duplicados para la clave, slo se suprime del archivo el primero de los registros duplicados. Si el archivo se describe externamente, el factor 1 puede ser una klist. v Si el acceso se efecta por nmero de registro relativo o nmero de ndice de subarchivo, el factor 1 debe contener una constante o variable numrica con cero posiciones decimales. v Los campos de clave de tipo grfico y UCS-2 deben tener el mismo CCSID que la clave del archivo. El factor 2 debe contener el nombre del archivo o el nombre de un formato de registro del archivo del que debe suprimirse un registro: v El archivo puede ser un archivo AS/400 o un archivo local. v Un nombre de formato de registro slo puede utilizarse con un archivo AS/400 descrito externamente. Si no se especifica el factor 1, el nombre de formato del registro debe ser el nombre del ltimo registro ledo del archivo; de lo contrario, se produce un error. Si el factor 1 tiene una entrada, las posiciones 71 y 72 pueden contener un indicador que se active si el registro a suprimir no se encuentra en el archivo. Si el factor 1 no tiene una entrada, deje estas posiciones en blanco. Esta informacin tambin puede obtenerse de la funcin incorporada %FOUND, que devuelve 0 si no se ha encontrado ningn registro y 1 si se ha encontrado alguno. Para manejar las excepciones de DELETE (cdigos de estado de archivo mayores que 1000), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones/errores de archivo en la pgina 37. Deje las posiciones 75 y 76 en blanco. Tenga en cuenta lo siguiente al suprimir registros: v La supresin de un registro de un componente de subarchivo provoca un desplazamiento de los nmeros de ndice de registro del subarchivo para los registros restantes del subarchivo. v Si se realiza una operacin de lectura secuencial en el archivo despus de una operacin DELETE satisfactoria para dicho archivo, se obtiene el registro situado a continuacin del registro suprimido.
DIV (Dividir)
Cdigo DIV (H) Factor 1 Dividendo Factor 2 Divisor Campo de resultado Cociente Indicadores + Z
Si se especifica el factor 1, la operacin DIV divide el factor 1 por el factor 2; de lo contrario, divide el campo del resultado por el factor 2. El cociente se coloca en el
432
campo de resultado. Si el factor 1 es 0, el resultado de la operacin es 0. El factor 2 no puede ser cero. Si es cero, la rutina de manejo de excepciones/errores de VARPG recibe el control. El factor 1 y el factor 2 han de ser numricos; cada uno puede contener uno de los siguientes: una matriz, elemento de matriz, campo, constante figurativa, literal, constante con nombre, subcampo o nombre de tabla. El factor 2 no puede ser cero. Si lo es, la rutina de manejo de excepciones/errores de VRPG recibe el control. El factor 2 debe ser numrico y puede contener una matriz, un elemento de matriz, un campo, una constante figurativa, un literal, una constante con nombre, un subcampo o un nombre de tabla. Todo resto que resulte de la operacin de divisin se pierde a menos que se especifique la operacin mover resto (MVR) como operacin siguiente. Si utiliza indicadores de condicionamiento, la operacin DIV debe especificarse inmediatamente antes de la operacin MVR. No puede redondearse el resultado de la operacin dividir si est especificado que la operacin MVR ha de efectuarse despus de la operacin DIV. Nota: La operacin MVR no puede efectuarse a continuacin de una operacin DIV si cualquier operando de la operacin DIV tiene el formato de coma flotante. Sin embargo, puede especificarse una variable de coma flotante como el resultado del cdigo de operacin MVR. En el apartado Operaciones aritmticas en la pgina 367 se describen las normas generales para la especificacin de operaciones aritmticas. La figura Figura 162 en la pgina 368 muestra ejemplos de la operacin DIV.
DO (Hacer)
Cdigo DO Factor 1 Valor inicial Factor 2 Valor lmite Campo de resultado Valor de ndice Indicadores
La operacin DO inicia un grupo de operaciones e indica el nmero de veces que se procesar el grupo. Para indicar el nmero de veces que se procesar el grupo, especifique un campo de ndice, un valor inicial y un valor lmite. Una sentencia ENDDO asociada marca el final del grupo. Si desea ms informacin acerca de grupos DO, consulte Operaciones de programacin estructuradas en la pgina 390. Si se especifica el factor 1, debe contener un literal numrico, una constante con nombre o un nombre de campo. Si no se especifica el factor 1, el valor inicial es 1. Si se especifica el factor 2, debe contener un nombre de campo numrico, un literal o una constante con nombre. El factor 2 debe especificarse con cero posiciones decimales. Si no se especifica el factor 2, el valor lmite es 1. Si se especifica el campo del resultado, debe ser un nombre de campo numrico que sea lo suficientemente grande para contener el valor lmite ms el incremento. Cualquier valor del campo del resultado se sustituye por el factor 1 cuando empieza la operacin DO.
433
El factor 2 de la operacin ENDDO asociada especifica el valor que se ha de aadir al campo de ndice (el campo del resultado de la operacin DO). Debe ser un literal numrico o un campo numrico sin posiciones decimales. Si no se especifica, se aade 1 al campo de ndice. Adems de la propia operacin DO, los indicadores de condicin de las sentencias DO y ENDDO controlan el grupo DO. Los indicadores de condicin de la sentencia DO controlan si se inicia o no la operacin DO. Estos indicadores slo se comprueban una vez, al inicio del bucle DO. Los indicadores de condicin de la sentencia ENDDO asociada controlan si el grupo DO se repite otra vez. Estos indicadores se comprueban al final de cada bucle. La operacin DO sigue estos 7 pasos: 1. Si se cumplen los indicadores de condicin de la lnea de sentencia DO, se procesa la operacin DO (paso 2). Si no se cumplen, el control pasa a la siguiente operacin a procesar tras la sentencia ENDDO asociada (paso 7). 2. EL valor inicial (factor 1) se mueve al campo del ndice (campo de resultado) cuando se inicia la operacin DO. 3. Si el valor del ndice es mayor al valor lmite, el control pasa a la operacin de clculo que sigue a la sentencia ENDDO asociada (paso 7). En caso contrario, el control pasa a la primera operacin tras la sentencia DO (paso 4). 4. Se procesan todas las operaciones del grupo DO. 5. Si no se cumplen los indicadores de condicin de la sentencia ENDDO, el control pasa a la operacin de clculo que sigue a la sentencia ENDDO asociada (paso 7). En caso contrario, se procesa la operacin ENDDO (paso 6). 6. La operacin ENDDO se procesa aadiendo el incremento al campo del ndice. El control pasa al paso 3. (Observe que los indicadores de condicin de la sentencia DO no se comprueban otra vez (paso 1) cuando el control pasa al paso 3.) 7. La sentencia siguiente a la sentencia ENDDO se procesa cuando los indicadores de condicin de las sentencias DO o ENDDO no se cumplen (paso 1 5), o cuando el valor del ndice es mayor al valor lmite (paso 3). Nota: El ndice, incremento, valor lmite e indicadores pueden modificarse dentro del bucle para afectar la finalizacin del grupo DO. Consulte LEAVE (Abandonar un grupo DO/FOR) en la pgina 464 y ITER (Iterar) en la pgina 461 para una descripcin de cmo estas operaciones afectan a la operacin DO. Consulte el tema FOR (Para) en la pgina 453 si desea obtener informacin sobre la realizacin de bucles repetitivos con expresiones de formato libre para los valores de inicio, incremento y lmite.
434
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* El grupo DO se procesa 10 veces cuando el indicador 17 est C* activado; el proceso se detiene cuando el valor del ndice C* en el campo X, el campo del resultado, es mayor al valor C* lmite (10) en el factor 2. Al detener su ejecucin el grupo C* DO, el control pasa a la operacin inmediatamente posterior C* a la operacin ENDDO. Debido a que no se ha especificado el factor 1 C* en la operacin DO, el valor inicial es 1. Debido a que no se ha C* especificado el factor 2 en la operacin ENDDO, el valor de C* incremento es 1. C C 17 DO 10 X 3 0 C : C ENDDO C* C* El grupo DO puede procesarse 10 veces. El grupo DO detiene C* su ejecucin cuando el valor del ndice en el campo X es mayor C* que el valor lmite (20) en el factor 2, o si el indicador C* 50 no est activado al encontrar la operacin ENDDO. Cuando C* el indicador 50 no est activado, la operacin ENDDO no se C* procesa; por lo tanto, el control pasa a la operacin que C* sigue a la operacin ENDDO. El valor inicial 2 se especifica C* en el factor 1 de la operacin DO, y el valor de incremento 2 C* se especifica en el factor 2 de la operacin ENDDO. C* C 2 DO 20 X 3 0 C : C : C : C 50 ENDDO 2
La operacin DOU es similar a la operacin DOUxx. El cdigo de operacin DOU precede a un grupo de operaciones que desea ejecutar una vez como mnimo y posiblemente ms de una vez. Una sentencia ENDDO asociada marca el final del grupo. Se diferencia en que la condicin lgica se indica mediante una expresin de valoracin de indicador en la entrada del Factor 2 ampliado. El factor 1 debe estar en blanco. El factor 2 ampliado contiene la expresin que se ha de evaluar. Las operaciones controladas por la operacin DOU se ejecutan hasta que es cierta la expresin del campo del factor 2 ampliado. Si desea obtener informacin acerca de cmo utilizar los ampliadores de operacin M y R, consulte la seccin Reglas de precisin para operaciones numricas en la pgina 358. En el apartado Operaciones que utilizan expresiones en la pgina 380 se describe cmo especificar expresiones. En el apartado Operaciones de comparacin en la pgina 375 se describen las normas para especificar las operaciones de comparacin.
435
CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++.. C Extended-factor2-continuation+++++++++++++++ C* En este ejemplo, el bucle hacer se repetir hasta pulsar F3. C DOU *INKC C : C : C ENDDO C C* El bucle hacer siguiente se repetir hasta que *In01 est activado C* o hasta que FIELD2 sea mayor que FIELD3 C C DOU *IN01 OR (Field2 > Field3) C : C : C ENDDO C* El bucle siguiente se repetir hasta que X sea mayor que el nmero C* de elementos en Array C C DOU X > %elem(Array) C EVAL Total = Total + Array(x) C EVAL X = X + 1 C ENDDO C C*
El cdigo de operacin DOUxx precede a un grupo de operaciones que desea ejecutar una vez como mnimo y posiblemente ms de una vez. Una sentencia ENDDO asociada marca el final del grupo. Para obtener ms informacin acerca de los grupos DO y del significado de xx, consulte Operaciones de programacin estructuradas en la pgina 390. El factor 1 y el factor 2 deben contener un literal, una constante con nombre, un nombre de campo, un nombre de tabla, un elemento de matriz, una constante figurativa o un nombre de estructura de datos. El factor 1 y el factor 2 deben tener el mismo tipo de datos. En la sentencia DOUxx, se indica una relacin xx. Para especificar una condicin ms compleja, site las sentencias ANDxx ORxx inmediatamente despus de la sentencia DOUxx. Las operaciones del grupo DO se procesan una vez, y a continuacin se repite el grupo mientras exista la relacin entre el factor 1 y el factor 2 o exista la condicin especificada por la combinacin de las operaciones DOUxx, ANDxx o ORxx. El grupo se procesa siempre una vez como mnimo incluso si la condicin no se cumple al inicio del grupo. Adems de la propia operacin DOUxx, los indicadores de condicin de las sentencias DOUxx y ENDDO controlan el grupo DO. Los indicadores de condicin de la sentencia DOUxx controlan si empieza o no la operacin DOUxx. Los indicadores de condicin de la sentencia ENDDO asociada pueden provocar que un bucle DO finalice de forma prematura.
436
La operacin DOUxx sigue estos pasos: 1. Si se cumplen los indicadores de condicin en la lnea de sentencia DOUxx, se procesa la operacin DOUxx (paso 2). Si no se cumplen los indicadores, el control pasa a la siguiente operacin a procesar tras la sentencia ENDDO asociada (paso 6). 2. La operacin DOUxx se procesa pasando el control a la siguiente operacin que puede procesarse (paso 3). La operacin DOUxx no compara el factor 1 y el factor 2 ni comprueba la condicin especificada es este punto. 3. Se procesan todas las operaciones del grupo DO. 4. Si no se cumplen los indicadores de condicin de la sentencia ENDDO, el control pasa a la operacin de clculo que sigue a la sentencia ENDDO asociada (paso 6). En caso contrario, se procesa la operacin ENDDO (paso 5). 5. La operacin ENDDO se procesa comparando el factor 1 y el factor 2 de la operacin DOUxx o comprobando la condicin especificada por una operacin combinada. Si existe la relacin xx entre el factor 1 y el factor 2 existe la condicin especificada, finaliza el grupo DO y el control pasa a la siguiente operacin de clculo tras la sentencia ENDDO (paso 6). Si no existe la relacin xx entre el factor 1 y el factor 2 no existe la condicin especificada, se repiten las operaciones del grupo DO (paso 3). 6. La sentencia siguiente a la sentencia ENDDO se procesa cuando los indicadores de condicin de las sentencias DOUxx o ENDDO no se cumplen (pasos 1 4), o cuando existe la relacin xx entre el factor 1 y el factor 2 en el paso 5. Consulte LEAVE (Abandonar un grupo DO/FOR) en la pgina 464 e ITER (Iterar) en la pgina 461 para obtener informacin acerca de cmo afectan estas operaciones a la operacin DOUxx.
437
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* La operacin DOUEQ ejecuta la operacin del grupo DO una vez como C* mnimo. C C FLDA DOUEQ FLDB C C* C* En la operacin ENDDO, se procesa una comprobacin para determinar si C* FLDA es igual a FLDB. Si FLDA no es igual a FLDB, se C* vuelven a procesar las operaciones anteriores. Este bucle contina C* procesndose hasta que FLDA sea igual a FLDB. Cuando FLDA es igual C* a FLDB, el programa se bifurca a la operacin que sigue C* a la operacin ENDDO. C C SUB 1 FLDA C ENDDO C C* C* La operacin combinada DOUEQ ANDEQ OREQ procesa la operacin C* del grupo DO una vez como mnimo. C C FLDA DOUEQ FLDB C FLDC ANDEQ FLDD C FLDE OREQ 100 C C* C* En la operacin ENDDO, se realiza una comprobacin para determinar C* la condicin especificada, FLDA igual a FLDB y FLDC igual a C* FLDD, se cumple. Si se cumple, el programa se bifurca a C* la operacin que sigue a la operacin ENDDO. No es necesario C* comprobar la condicin OREQ, si FLDE es igual a 100, si las C* condiciones DOUEQ y ANDEQ se cumplen. Si la condicin especificada C* no se cumple, se comprueba la condicin OREQ. Si sta C* se cumple, el programa se bifurca a la operacin C* que sigue a ENDDO. De lo contrario, las operaciones que C* siguen a la operacin OREQ se procesan y el programa C* procesa las comprobaciones condicionales comenzando por la segunda C* operacin DOUEQ. Si no se cumple la condicin DOUEQ, ANDEQ ni C* OREQ, las operaciones que siguen a la operacin OREQ C* se procesan de nuevo. C C SUB 1 FLDA C ADD 1 FLDC C ADD 5 FLDE C ENDDO
El cdigo de operacin DOW precede a un grupo de operaciones que desea procesar cuando exista una condicin dada. Una sentencia ENDDO asociada marca el final del grupo. Su funcin es similar a la del cdigo de operacin DOWxx. Se diferencia en que la condicin lgica se indica mediante una expresin de valoracin de indicador en la entrada del Factor 2 ampliado. Las operaciones controladas por la operacin DOW se ejecutan hasta que se cumple la expresin en
438
el campo del factor 2 ampliado. Si desea obtener informacin acerca de cmo utilizar los ampliadores de operacin M y R, consulte la seccin Reglas de precisin para operaciones numricas en la pgina 358. En el apartado Operaciones de comparacin en la pgina 375 se describen las normas para especificar las operaciones de comparacin.
CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++.. C Extended-factor2-continuation+++++++++++++++ C* En este ejemplo, el bucle hacer se repetir mientras la condicin C* sea falsa. Es decir, cuando A > 5 y/o B+C no sean iguales a cero. C C DOW A <= 5 AND B+C = 0 C : C : C ENDDO C
El cdigo de operacin DOWxx precede a un grupo de operaciones que desea procesar cuando exista una condicin dada. Para especificar una condicin ms compleja, inmediatamente a continuacin de la sentencia DOWxx debe colocarse una sentencia ANDxx u ORxx. Una sentencia ENDDO asociada marca el final del grupo. Para ms informacin acerca de los grupos DO y del significado de xx, vea Operaciones de programacin estructuradas en la pgina 390. El factor 1 y el factor 2 deben contener un literal, una constante con nombre, una constante figurativa, un nombre de campo, un nombre de tabla, un elemento de matriz o un nombre de estructura de datos. El factor 1 y el factor 2 deben tener el mismo tipo de datos. La comparacin de los factores 1 y 2 sigue las mismas normas dadas para las operaciones de comparacin. Consulte Operaciones de comparacin en la pgina 375. Adems de la propia operacin DOWxx, los indicadores de condicin de las sentencias DOWxx y ENDDO controlan el grupo DO. Los indicadores de condicin de la sentencia DOWxx controlan si empieza o no la operacin DOWxx. Los indicadores de condicin en la sentencia ENDDO asociada controlan si el grupo DOW se repite otra vez. La operacin DOWxx sigue estos pasos: 1. Si se cumplen los indicadores de condicin en la lnea de sentencia DOWxx, se procesa la operacin DOWxx (paso 2). Si no se cumplen los indicadores, el control pasa a la siguiente operacin a procesar tras la sentencia ENDDO asociada (paso 6). 2. La operacin DOWxx se procesa comparando el factor 1 y el factor 2 comprobando la condicin especificada por una operacin combinada DOWxx, ANDxx o ORxx. Si no existe la relacin xx entre el factor 1 y el factor 2 la condicin especificada por una operacin combinada, el grupo DO finaliza y el control pasa a la siguiente operacin de clculo tras la sentencia ENDDO (paso
439
3. 4.
5.
6.
6). Si existe la relacin xx entre el factor 1 y el factor 2 existe la condicin especificada, se repiten las operaciones del grupo DO (paso 3). Se procesan todas las operaciones del grupo DO. Si no se cumplen los indicadores de condicin de la sentencia ENDDO, el control pasa a la siguiente operacin a ejecutar tras la sentencia ENDDO asociada (paso 6). En caso contrario, se procesa la operacin ENDDO (paso 5). La operacin ENDDO se procesa pasando el control a la operacin DOWxx (paso 2). (Observe que los indicadores de condicin de la sentencia DOWxx no se comprueban de nuevo en el paso 1.) La sentencia siguiente a la sentencia ENDDO se procesa cuando los indicadores de condicin en las sentencias DOWxx o ENDDO no se cumplen (pasos 1 4), o cuando existe la relacin xx entre el factor 1 y el factor 2 en el paso 2.
Consulte LEAVE (Abandonar un grupo DO/FOR) en la pgina 464 e ITER (Iterar) en la pgina 461 para obtener informacin sobre cmo afectan estas operaciones a la operacin DOWxx.
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* La operacin DOWLT slo permite que se procese la operacin C* del grupo DO si FLDA es menor que FLDB. Si FLDA no es menor C* que FLDB, el programa se bifurca a la operacin inmediatamente C* posterior a la operacin ENDDO. Si FLDA es menor que FLDB, C* se procesa la operacin del grupo DO. C C FLDA DOWLT FLDB C C* C* La operacin ENDDO hace que el programa se bifurque a la primera C* operacin DOWLT donde se realiza una comprobacin para determinar C* si FLDA es menor que FLDB. Este bucle sigue procesndose hasta que C* FLDA sea igual o mayor que FLDB; entonces el programa se bifurca C* a la operacin inmediatamente posterior a la operacin ENDDO. C C MULT 2.08 FLDA C ENDDO C C* En este ejemplo se comprueban varias condiciones. La operacin C* DOWLT ORLT combinada permite que se procese la operacin del grupo C* DO slo mientras FLDA sea menor que FLDB o FLDC. Si no se cumple C* ninguna de las condiciones especificadas, el programa se bifurca C* a la operacin inmediatamente posterior a la operacin DO. Si C* se cumple alguna de las condiciones especificadas, se procesa la C* operacin tras la operacin ORLT. C C FLDA DOWLT FLDB C FLDA ORLT FLDC C C* La operacin ENDDO hace que el programa se bifurque a la segunda C* operacin DOWLT donde una comprobacin determina si se cumplen las C* condiciones especificadas. Este bucle sigue hasta que FLDA sea C* igual o mayor que FLDB y FLDC; entonces el programa se bifurca a la C* operacin inmediatamente posterior a la operacin ENDDO. C C MULT 2.08 FLDA C ENDDO
440
La operacin DSPLY visualiza una ventana Mensaje. El programa se para, visualiza la ventana de mensaje y espera una respuesta. El factor 1 debe contener uno de los siguientes elementos: v Un nombre de campo v Un nombre de campo definido en la palabra clave MSGNBR v Literal de tipo carcter, literal numrico, literal hexadecimal, literal DBCS, literal de fecha, literal de hora o literal de indicacin de la hora v Un nombre de especificacin de definicin v Atributos de evento v Identificador de mensaje El factor 1 puede contener un atributo de evento siempre que la operacin DSPLY est en una subrutina de accin para un evento adecuado (esto es, el evento tiene el atributo de evento especificado) o la operacin DSPLY es una subrutina de usuario ejecutada por una subrutina de accin para un evento. Si se especifica la palabra clave EXE o NOMAIN en una especificacin de control, no se puede utilizar una descripcin de cuadro de mensajes o un identificador de mensaje como nombre de campo. No se permiten campos de puntero. Con la excepcin de los nmeros de mensaje, todos los datos del factor 1 se convierten a caracteres antes de ser visualizados. Si se especifica el factor 2, debe contener el nombre de Especificacin de definicin que define el estilo. El factor 2 es opcional cuando: v El factor 1 contiene un identificador de mensaje (*MSGnnnn) v El factor 1 contiene un nombre de Especificacin de definicin y la Especificacin de definicin a la que se hace referencia contiene la palabra clave MSGNBR. MSGNBR puede ser el nmero de mensaje o un campo que contenga el nmero de mensaje. El factor 2 se ignora si se especifica la palabra clave EXE o NOMAIN en una especificacin de control. El campo del resultado contiene un valor que representa el botn que pulsa el usuario en la ventana Mensaje. El valor corresponde a una de las constantes figurativas que se utilizan para definir los botones que aparecen en el Recuadro de Mensaje (por ejemplo, *RETRY). Estas constantes deben utilizarse para comprobar qu botn ha pulsado el usuario. El campo del resultado debe ser un valor numrico con una longitud de 9 y sin posiciones decimales. Si se especifica la palabra clave EXE o NOMAIN, el campo del resultado puede ser numrico con precisin 9,0 o de caracteres. Los campos de respuesta de las ventanas Mensaje tienen un comportamiento distinto para campos numricos y de caracteres. Los campos de respuesta numricos se comportan de la forma siguiente: v Al pulsar Intro o Retorno en el campo se devuelve el valor 0. v El campo slo acepta 9 dgitos, si se especifican ms de 9, se ignoran. v Si se especifica un carcter incluyendo la coma decimal, se produce un error de tiempo de ejecucin y el programa finaliza.
Captulo 25. Cdigos de operacin
441
Los campos de caracteres se comportan de la forma siguiente: v Al pulsar Intro o Retorno el campo se llena de espacios en blanco. v Se ignoran los caracteres adicionales tecleados en el campo. El campo puede aceptar una o varias palabras. Cuando se utiliza la palabra clave NOMAIN, los procedimientos llamados desde las aplicaciones GUI de Windows 95 o Windows NT se comportan de la forma siguiente: v Para los campos de caracteres o DBCS, no se visualiza ningn mensaje y el campo de respuesta se llena de espacios en blanco. v Los campos numricos reciben el valor 0. Cuando se utiliza la palabra clave EXE o NOMAIN en las aplicaciones de Windows 3.1, no se visualiza ningn mensaje. Los campos de respuesta de caracteres o DBCS se llenan de espacios en blanco; los campos numricos con el valor 0. Para manejar las excepciones de DSPLY puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Si se produce un error en la operacin, la excepcin se maneja mediante el mtodo especificado. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48. Varias palabras clave de la Especificacin de definicin se utilizan para definir la ventana Mensaje. Las palabras clave BUTTON, MSGTITLE y STYLE definen el estilo de la ventana. Las palabras clave MSGDATA, MSGNBR y MSGTEXT definen el texto del mensaje que aparece en la ventana. Consulte la seccin Palabras clave de especificacin de definicin en la pgina 237.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D Box1 M STYLE(*WARN) BUTTON(*RETRY:*ABORT:*IGNORE) D* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq... C *MSG9999 DSPLY BOX1 REPLY 9 0 C IF reply = *RETRY * Se ha pulsado el botn Reintentar C ..... C ELSE C IF reply = *ABORT * Se ha pulsado el botn Cancelar anmalamente C ..... C ELSE * Se ha pulsado el botn Ignorar C ..... C ENDIF C ENDIF
442
La operacin ELSE es una parte opcional de las operaciones IFxx e IF. Si se cumple la comparacin IFxx, se procesan los clculos anteriores a ELSE; en caso contrario se procesan los clculos que siguen a ELSE. No se permiten entradas de indicador de condicionamiento (posiciones 9 a 11). Para cerrar el grupo IFxx/ELSE, utilice una operacin ENDIF. En la Figura 216 en la pgina 459 se muestra un ejemplo de una operacin ELSE con una operacin IFxx.
La operacin ENDyy finaliza un grupo de operaciones CASxx, DO, DOU, DOW, DOUxx, DOWxx, FOR, IF, IFxx o SELECT. La operacin ENDyy finaliza un grupo de operaciones CASxx, DO, DOU, DOW, DOUxx, DOWxx, FOR, IF, IFxx o SELECT. A continuacin se indican las operaciones ENDyy: END ENDCS ENDDO ENDFOR ENDIF ENDSL Finaliza un grupo CASxx, DO, DOU, DOUxx, DOW, DOWxx, FOR, IF, IFxx o SELECT Finaliza un grupo CASxx Finaliza un grupo DO, DOU, DOUxx, DOW o DOWxx Finaliza un grupo FOR Finaliza un grupo IF o IFxx Finaliza un grupo SELECT
El factor 2 slo se permite en una operacin ENDyy que delimite un grupo DO. Contiene el valor de incremento del grupo DO. Puede ser positivo o negativo, debe tener cero posiciones decimales y puede ser un elemento de matriz, un nombre de tabla, una estructura de datos, un campo, una constante con nombre o un literal numrico. Si no se especifica el factor 2, el incremento por omisin es 1. Si el factor 2 es negativo, el grupo DO no termina nunca. Se pueden especificar indicadores de condicionamiento para una operacin ENDDO o ENDFOR. No estn permitidos para las operaciones ENDCS, ENDIF y ENDSL.
443
No se permiten indicadores resultantes. El factor 1, el factor 2 y el campo del resultado han de estar todos en blanco para las operaciones ENDCS, ENDIF y ENDSL. Si se utiliza una forma ENDyy con un grupo de operacin distinto (por ejemplo, ENDIF con un grupo estructurado), se produce un error en tiempo de compilacin. Si desea obtener ms informacin, consulte las secciones siguientes, en las que encontrar ejemplos que utilizan la operacin ENDyy: v CASxx (Invocar subrutina condicionalmente) en la pgina 409 v DO (Hacer) en la pgina 433 v DOUxx (Hacer hasta) en la pgina 436 v DOWxx (Hacer mientras) en la pgina 439 v IFxx (Si) en la pgina 458 v DOU (Hacer hasta) en la pgina 435 v DOW (Hacer mientras) en la pgina 438 v FOR (Para) en la pgina 453 v IF (Si) en la pgina 457 v SELECT (Iniciar un grupo de seleccin) en la pgina 530
La operacin ENDACT define el final de una subrutina de accin. ENDACT debe ser la ltima operacin de una subrutina de accin. Si se especifica el factor 2, debe contener uno de los elementos siguientes: *DEFAULT La subrutina de accin actual termina y se ejecuta el proceso por omisin correspondiente al evento actual. *NODEFAULT La subrutina de accin actual termina y NO se ejecuta el proceso por omisin correspondiente al evento actual. un nombre de campo El nombre de campo debe tener 12 caracteres y puede contener *DEFAULT o *NODEFAULT Si el campo contiene un valor no vlido, el gestor de errores por omisin recibe el control. Si no se especifica el factor 2, finaliza la subrutina de accin actual y se ejecuta el proceso por omisin correspondiente al evento actual. Cuando el proceso llega a la operacin ENDACT y si LR est activado, se termina el componente. *DEFAULT y *NODEFAULT se ignoran. Si las subrutinas de accin estn jerarquizadas, LR no se comprueba y se ignoran *DEFAULT y *NODEFAULT. No se permiten entradas de indicadores de condicionamiento.
444
La operacin ENDSR define el final de una subrutina de usuario. Origina una vuelta a la sentencia que est a continuacin de la operacin EXSR. ENDSR debe ser la ltima operacin de la subrutina. Si se especifica el factor 1, debe contener una etiqueta. Una operacin GOTO puede bifurcar a esta etiqueta. El factor 2 slo puede especificarse al final de una subrutina *PSSR o *INFSR. Debe contener uno de los elementos siguientes: *CANCL La subrutina de accin que se estaba ejecutando cuando se produjo el error finaliza y el componente lgico termina anormalmente. *ENDCOMP La subrutina de accin que se estaba ejecutando cuando se produjo el error finaliza y el componente lgico termina anormalmente. *DEFAULT Se devuelve el control desde la subrutina de accin actual y se ejecuta el proceso por omisin correspondiente al evento actual. Si LR est activado, el componente lgico termina normalmente. Si LR est activado, la subrutina de accin finaliza y se ejecuta cualquier accin por omisin correspondiente al evento. *NODEFAULT Se devuelve el control desde la subrutina de accin actual y no se ejecuta el proceso por omisin correspondiente al evento actual. Si LR est activado, el componente lgico termina normalmente. Si LR NO est activado, la subrutina de accin finaliza y NO se ejecuta ninguna accin por omisin correspondiente al evento. *ENDAPPL La subrutina de accin que se estaba ejecutando cuando se ha producido el error finaliza y finalizan todos los componentes activados actualmente por orden jerrquico inverso. El componente que estaba activo cuando se ha producido el error termina normalmente y todos los dems componentes terminan normalmente. un nombre de campo Un nombre de campo puede contener *CANCL, *ENDCOMP, *DEFAULT, *NODEFAULT o *ENDAPPL. Si el campo contiene un valor no vlido, el manejador de errores por omisin recibe el control.
Captulo 25. Cdigos de operacin
445
La operacin EVAL evala una sentencia de asignacin que tenga la forma resultado=expresin. Se evala la expresin y el resultado se sita en el resultado. El resultado debe ser un nombre de campo, un nombre de matriz, un elemento de matriz, una estructura de datos, un subcampo de estructura de datos o una serie que utilice la funcin incorporada %SUBST. Un resultado de tipo carcter, grfico o UCS-2 se justificar por la izquierda y se rellenar con blancos, o bien se truncar si es necesario. El resultado no puede ser un literal ni una constante. Si el resultado representa una matriz sin ndice o una matriz especificada como array(*), el valor de la expresin se asigna a cada elemento del resultado, de acuerdo a las normas descritas en el captulo de matrices. En caso contrario, la expresin se evala una vez y el valor se coloca en cada elemento de la matriz o submatriz. El tipo de la expresin debe ser el mismo que el tipo del resultado. Para expresiones numricas, se permite el ampliador del cdigo de operacin de redondeo. Las normas para redondear son equivalentes a las de las operaciones aritmticas. Consulte el apartado Captulo 24. Expresiones en la pgina 351 para obtener informacin sobre expresiones. Consulte la seccin Reglas de precisin para operaciones numricas en la pgina 358 si desea obtener informacin acerca de las reglas de precisin para las expresiones numricas. Esto adquiere una importancia especial si la expresin contiene operaciones de dividir o si la operacin EVAL utiliza alguno de los ampliadores de operacin.
446
CSRN01Factor1+++++++Opcode(E)+Extended-factor2++++++++++++++++++++++++++++ C* Suponer FIELD1 = 10 C* FIELD2 = 9 C* FIELD3 = 8 C* FIELD4 = 7 C* ARR se define con DIM(10) C* *IN01 = *ON C* A = 'abcdefghijklmno' (definido long 15) C* CHARFIELD1 = 'There' (definido long 5) C* El contenido de RESULT tras la operacin es 20 C EVAL RESULT=FIELD1 + FIELD2+(FIELD3-FIELD4) C* El indicador *IN03 se establecer en *TRUE C EVAL *IN03 = *IN01 OR (FIELD2 > FIELD3) C* Se asignar el valor 72 a cada elemento de la matriz ARR C EVAL ARR(*) = FIELD2 * FIELD3 C* Tras la operacin, el contenido de A = 'Hello There ' C EVAL A = 'Hello ' + CHARFIELD1 C* Tras la operacin, el contenido de A = 'HelloThere ' C EVAL A = %TRIMR('Hello ') + %TRIML(CHARFIELD1) C* Fecha en la asignacin C EVAL ISODATE = DMYDATE C* Expresin relacional C* Tras la operacin, el valor de *IN03 = *ON C EVAL *IN03 = FIELD3 > FIELD2 C* Fecha en expresin relacional C EVAL *IN05 = Date1 > Date2 C* Tras EVAL el valor original de A contiene 'ab****ghijklmno' C EVAL %SUBST(A:3:4) = '****' C : C* Tras EVAL, PTR tiene la direccin de la variable CHARFIELD1 C EVAL PTR = %ADDR(CHARFIELD1) C : C* Ejemplo para mostrar que el resultado de una expresin lgica C* es compatible con el tipo de datos de caracteres C* La sentencia EVAL siguiente consta de 3 expresiones lgicas C* cuyos resultados se concatenan usando el operador '+' C* El valor resultante del campo de caracteres RES es '010' C : C EVAL RES = (FIELD1<10) + *in01 + (field2 >= 17)
El cdigo de operacin EVALR evala una sentencia de asignacin que tenga la forma resultado=expresin. Se evala la expresin y el resultado se sita ajustado por la derecha en el resultado. Por lo tanto, el resultado no puede ser un literal o constante, pero s debe ser un nombre de campo de tipo carcter, grfico o UCS-2 de longitud fija, un nombre de matriz, un elemento de matriz, una estructura de datos, un subcampo de estructura de datos o una serie que utilice la funcin incorporada %SUBST. El tipo de la expresin debe ser el mismo que el tipo del resultado. El resultado se alinear a la derecha y se rellenar con blancos a la izquierda, o se truncar por la izquierda si es necesario. Nota: A diferencia de la operacin EVAL, el resultado de EVALR slo puede ser de tipo carcter, grfico o UCS-2. Adems, slo se permiten campos de
Captulo 25. Cdigos de operacin
447
resultado de longitud fija, aunque %SUBST puede contener un campo de longitud variable si esta funcin incorporada forma la parte izquierda de la expresin. Si el resultado representa una matriz sin ndice o una matriz especificada como array(*), el valor de la expresin se asigna a cada elemento del resultado, segn las normas descritas en el apartado Especificacin de una matriz en los clculos en la pgina 168. En caso contrario, la expresin se evala una vez y el valor se coloca en cada elemento de la matriz o submatriz. Consulte el apartado Captulo 24. Expresiones en la pgina 351 para obtener informacin sobre expresiones. Consulte la seccin Reglas de precisin para operaciones numricas en la pgina 358 si desea obtener informacin acerca de las reglas de precisin para las expresiones numricas. Esto adquiere una importancia especial si la expresin contiene operaciones de dividir o si la operacin EVALR utiliza alguno de los ampliadores de operacin.
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ * D Name S 20A * CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ * C EVAL Name = 'Kurt Weill' * Name ahora es 'Kurt Weill ' C EVALR Name = 'Johann Strauss' * Name ahora es ' Johann Strauss' C EVALR %SUBST(Name:1:12) = 'Richard' * Name ahora es ' Richard Strauss' C EVAL NAME = 'Wolfgang Amadeus Mozart' * Name ahora es 'Wolfgang Amadeus Moz' C EVALR NAME = 'Wolfgang Amadeus Mozart' * Name ahora es 'fgang Amadeus Mozart'
La operacin EXCEPT permite que se graben uno o ms registros de excepcin durante el tiempo de clculo. El archivo en el que se graban los registros puede ser un archivo local o un archivo AS/400. Los registros de excepcin que se han de grabar en tiempo de clculo se indican con E (en la posicin 17) en las especificaciones de salida. El nombre EXCEPT del factor 2 ha de ser igual al nombre EXCEPT de las especificaciones de salida (posiciones 30 a 39) de los registros de excepcin. Si se especifica un nombre en el factor 2, slo se comprueban los registros de excepcin con el mismo nombre EXCEPT y se graban si se satisfacen los indicadores de condicionamiento. Si no se especifica el factor 2, slo se comprueban los registros de excepcin de las especificaciones de salida (posiciones 30 a 39) y se graban si se satisfacen los indicadores de condicionamiento.
448
Si se especifica una salida de excepcin en un formato que no contiene campos, tiene lugar lo siguiente: v Si se especifica un archivo de salida, se graba un registro con valores por omisin. v Si un registro est bloqueado, el sistema trata la operacin como una peticin para desbloquear el registro. Esta es la forma alternativa de solicitar un desbloqueo. Para ello, es preferible utilizar la operacin UNLOCK.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* Cuando se procesa la operacin EXCEPT con HDG especificado en el factor C* factor 2, se graban todos los registros de excepcin con el nombre C* EXCEPT HDG. En este ejemplo, se imprimira UDATE y PAGE y despus C* la impresora dejara un espacio de 2 lneas. C* El segundo registro HDG imprimira una lnea de puntos y despus C* la impresora dejara un espacio de 3 lneas. C EXCEPT HDG C* C* Cuando se procesa la operacin EXCEPT sin entrada en el factor 2, C* se graban todos los registros de excepcin que no tienen un nombre C* EXCEPT especificado en las posiciones de 30 a 39 si se cumplen los C* indicadores de condicin. Una operacin EXCEPT sin entrada en el C* factor 2 graba los registros de excepcin sin indicadores C* de condicin y sin un nombre EXCEPT. C* En este ejemplo, si el indicador 10 est activado, se imprimirn C* TITLE y AUTH y despus la impresora dejar un espacio de 1 lnea. C EXCEPT O* OFilename++DF..N01N02N03Excnam++++B++A++Sb+Sa+............................. O..............N01N02N03Field+++++++++YB.End++PConstant/editword/DTformat++ O E 10 1 O TITLE O AUTH O E HDG 2 O UDATE O PAGE O E HDG 3 O '...............' O '...............' O E DETAIL 1 O AUTH O VERSNO
La operacin EXSR hace que se procese la subrutina de usuario nombrada en el factor 2. El nombre de subrutina de usuario debe ser un nombre simblico exclusivo y debe aparecer como el factor 1 de una operacin BEGSR. La operacin EXSR puede aparecer en cualquier lugar de las especificaciones de clculo. Cuando la subrutina de usuario es una subrutina de excepcin/error con una entrada en el factor 2 de la operacin ENDSR, no se procesa la sentencia que figura a continuacin de EXSR.
449
El factor 2 debe contener un nombre simblico exclusivo o la palabra clave *TERMSR, *PSSR o *INZSR: v *TERMSR especifica que se ha de procesar la subrutina de terminacin normal v *PSSR especifica que se ha de procesar la subrutina de excepcin/error de programa v *INZSR especifica que se ha de procesar la subrutina de inicializacin. No puede utilizarse la operacin EXSR para procesar una subrutina de accin.
450
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* C : C : C EXSR SUBRTB C : C : C : C EXSR SUBRTA C : C : C : C SUBRTA BEGSR C : C : C : C* C* Una subrutina puede llamar a otra subrutina. C* C EXSR SUBRTC C : C : C : C ENDSR C SUBRTB BEGSR C : C : C : C*
Figura 209. Ejemplo de cmo codificar subrutinas de usuario - utilizacin de BEGSR y EXSR
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* Las operaciones GOTO y TAG pueden utilizarse en otra subrutina. C* C START TAG C : C : C : C 23 GOTO END C : C : C : C 24 GOTO START C END ENDSR C SUBRTC BEGSR C : C : C : C ENDSR C*
Figura 210. Ejemplo de cmo codificar subrutinas de usuario - utilizacin de GOTO y TAG
451
La operacin EXTRCT devuelve una de las siguientes salidas en el campo del resultado: v La parte del ao, mes o da de un campo de fecha o de indicacin de la hora v La parte de horas, minutos o segundos de un campo de hora o de indicacin de la hora v La parte de microsegundos del campo de indicacin de la hora El factor 2 debe ser un campo, un subcampo, un elemento de tabla o un elemento de matriz. Debe especificarse la fecha, la hora o la indicacin de la hora seguida del cdigo de duracin. Para obtener una lista de los cdigos de duracin, consulte Operaciones de fecha en la pgina 377. El factor 1 debe estar en blanco. El campo del resultado debe ser un campo numrico o de caracteres, un subcampo, un elemento de tabla o un elemento de matriz. Los datos de tipo carcter se ajustan por la izquierda en el campo de resultado. Cuando se utiliza la operacin EXTRCT con una fecha juliana (formato *JUL), la especificacin de un cdigo de duracin *D significa la devolucin del da del mes y al especificar *M se devolver el mes del ao. Si necesita que el da y el mes estn en formato de 3 dgitos, puede utilizar un puntero base para obtenerlo. Si se especifica un indicador de resultado en las posiciones 73 y 74, se activa cuando se produce un error durante la operacin EXTRCT. Para manejar las excepciones de EXTRCT (cdigo de estado de programa 112), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48.
CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* Extrae el mes de un campo de indicacin de la hora a un campo de C* 2 dgitos que se utiliza como ndice de una matriz de caracteres C* que contiene los nombres de los meses. A continuacin extrae el C* da de la indicacin de la hora a un campo de caracteres de 2 C* bytes que puede utilizarse en una expresin de concatenacin C* EVAL para formar una serie que contenga, por ejemplo, C* "Marzo 13" C C EXTRCT LOGONTIME:*M LOGMONTH 2 0 C EXTRCT LOGONTIME:*D LOGDAY 2 C EVAL DATE_STR = %TRIMR(MONTHS(LOGMONTH) C + ' ' + LOGDAY
452
La operacin FEOD seala el final lgico de los datos para un archivo AS/400. El archivo puede volverse a utilizar para operaciones de archivo subsiguientes sin especificar la operacin OPEN. El archivo todava est conectado al programa. Es diferente a la operacin CLOSE, en la que se desconecta el archivo del programa y el usuario debe especificar una operacin OPEN si desea volver a utilizar el archivo. Para obtener ms informacin, consulte el apartado CLOSE (Cerrar archivos) en la pgina 424. La operacin FEOD slo se puede utilizar con archivos AS/400. El factor 2 contiene el archivo para el que se especifica FEOD. Para manejar las excepciones de FEOD (cdigos de estado de archivo mayores que 1000), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones/errores de archivo en la pgina 37. Para procesar otras operaciones secuenciales despus de la operacin FEOD (por ejemplo, utilizando READ o READP), se debe volver a situar el archivo. La operacin FEOD vaca los datos del almacenamiento intermedio correspondientes a los archivos de salida. Los datos se graban en DISK o PRINTER.
FOR (Para)
Cdigo FOR Factor 1 Factor ampliado 2 nombre-ndice = valor-inicial BY incremento TO | DOWNTO lmite
La operacin FOR inicia un grupo de operaciones y controla el nmero de veces que se procesar dicho grupo. Para indicar el nmero de veces que debe procesarse el grupo de operaciones, especifique un nombre de ndice, un valor inicial, un valor de incremento y un valor de lmite. Los valores opcionales de inicio, incremento y lmite pueden ser expresiones de formato libre. Una sentencia END o ENDFOR asociada marca el final del grupo. Si desea ms informacin acerca de los grupos FOR, consulte el apartado Operaciones de programacin estructuradas en la pgina 390. La sintaxis de la operacin FOR es la siguiente:
FOR nombre-ndice { = valor-inicial } { BY valor-incremento } { TO | DOWNTO valor-lmite } { cuerpo del bucle } ENDFOR | END
El nombre de ndice debe ser el nombre de una variable numrica escalar con cero posiciones decimales. No puede ser una matriz indexada. Valor-inicial,
453
valor-incremento y valor-lmite pueden ser valores o expresiones numricos con cero posiciones decimales. El valor de incremento, si se especifica, no puede ser cero. Las clusulas BY y TO (o DOWNTO) se pueden especificar en cualquier orden. Se permite tanto BY 2 TO 10 como TO 10 BY 2. Adems de la propia operacin FOR, los indicadores de condicin de las sentencias FOR y ENDFOR (o END) controlan el grupo FOR. Los indicadores de condicionamiento en la sentencia FOR controlan si empieza o no la operacin FOR. Estos indicadores slo se comprueban una vez, al inicio del bucle FOR. Los indicadores de condicin de la sentencia END o ENDFOR asociada controlan si el grupo FOR se repite otra vez. Estos indicadores se comprueban al final de cada bucle. La operacin FOR se realiza de la siguiente manera: 1. Si se cumplen los indicadores de condicin en la lnea de sentencia FOR, se procesa la operacin FOR (paso 2). Si no se cumplen los indicadores, el control pasa a la siguiente operacin a procesar tras la sentencia END o ENDFOR asociada (paso 8). 2. Si se especifica, se asigna el valor inicial al nombre de ndice. De lo contrario, el nombre de ndice conserva el valor que tena antes del inicio del bucle. 3. Si se especifica, se evala el valor lmite y se compara con el nombre de ndice. Si no se especifica ningn valor de lmite, el bucle se repetir indefinidamente hasta que encuentre una sentencia que salga del bucle (como por ejemplo LEAVE o GOTO) o hasta que finalice el programa o procedimiento (como por ejemplo RETURN). Si se especifica la clusula TO y el valor del nombre de ndice es mayor que el valor de lmite, el control pasa a la primera sentencia que sigue a la sentencia ENDFOR. Si se especifica DOWNTO y el valor del nombre de ndice es menor que el valor de lmite, el control pasa a la primera sentencia que sigue a ENDFOR. 4. Se procesan las operaciones del grupo FOR. 5. Si no se cumplen los indicadores de condicin de la sentencia END o ENDFOR, el control pasa a la siguiente sentencia despus del END o ENDFOR asociado y finaliza el bucle. 6. Si se especifica el valor de incremento, se evala. De lo contrario, el incremento toma el valor por omisin de 1. 7. El valor de incremento se suma (para TO) o se resta (para DOWNTO) al nombre de ndice. El control regresa al paso 3. (Los indicadores de condicionamiento de la sentencia FOR no se comprueban otra vez (paso 1) cuando el control regresa al paso 3.) 8. Se procesa la sentencia siguiente a la sentencia END o ENDFOR cuando no se cumplen los indicadores de condicionamiento de las sentencias FOR, END o ENDFOR, o cuando el valor del ndice es mayor que (para TO) o menor que (para DOWNTO) el valor del lmite (paso 3), o cuando se desborda el valor del ndice. Nota: Si el bucle FOR se realiza n veces, el valor del lmite se evala n+1 veces y el valor del incremento se evala n veces. Este hecho cobra importancia si la evaluacin del valor del lmite o del valor del incremento es compleja y laboriosa o si el valor del lmite o el valor del incremento contienen llamadas a subprocedimientos con efectos colaterales. Si no se desea la evaluacin repetida del lmite o del incremento, calcule los valores en variables temporales antes del bucle FOR y utilice dichas variables tamporales en el bucle FOR.
454
Tenga en cuenta lo siguiente al especificar la operacin FOR: v El nombre de ndice no puede declararse en la operacin FOR. Las variables deben declararse en las especificaciones D. v No se permite que un elemento de matriz indexada sea el campo de ndice de una operacin FOR. Consulte los apartados LEAVE (Abandonar un grupo DO/FOR) en la pgina 464 y ITER (Iterar) en la pgina 461 para obtener informacin sobre cmo afectan estas operaciones a la operacin FOR.
CSRN01Factor1+++++++Opcode(E)+Extended-factor2++++++++++++++++++++++++++++ * * Ejemplo 1 * Calcular n! C EVAL factorial = 1 C FOR i = 1 to n C EVAL factorial = factorial * i C ENDFOR * * Ejemplo 2 * Buscar el ltimo carcter que no sea blanco de un campo. * Si el campo tiene todo blancos, "i" ser cero. * De lo contrario, "i" ser la posicin del carcter no en blanco. * C FOR i = %len(campo) downto 1 C IF %subst(campo: i: 1) <> ' ' C LEAVE C ENDIF C ENDFOR * * Ejemplo 3 * Extraer todas las palabras delimitadas con blancos de una frase. C EVAL WordCnt = 0 C FOR i = 1 by WordIncr to %len(Frase) * Es un espacio en blanco? C IF %subst(Frase: i: 1) = ' ' C EVAL WordIncr = 1 C ITER C ENDIF * Se ha encontrado una palabra - determinar su longitud: C FOR j = i+1 to %len(Frase) C IF %SUBST(Frase: j: 1) = ' ' C LEAVE C ENDIF C ENDFOR * Almacenar la palabra: C EVAL WordIncr = j - i C EVAL WordCnt = WordCnt + 1 C EVAL Word(WordCnt) C = %subst(Frase: i: WordIncr) C ENDFOR
455
La operacin GETATR recupera el valor de un atributo de un componente. El nombre de la ventana padre es el nombre de ventana por omisin. El atributo de un componente slo se puede recuperar si se ha creado dicho componente. Notas: 1. Las operaciones GETATR pueden utilizarse en subrutinas de accin de mltiples enlaces. Para una descripcin de las subrutinas de accin de mltiples enlaces, consulte BEGACT (Empezar subrutina de accin) en la pgina 397. Para recuperar un atributo correspondiente a un componente de una ventana que no es la ventana padre, utilice la funcin incorporada %GETATR. Para obtener una descripcin de la funcin incorporada %GETATR, consulte %GETATR (Recuperar atributo) en la pgina 327. 2. La operacin GETATR no soporta valores enteros con signo y sin signo de 1 y 8 bytes, ni valores Unicode. El factor 1 debe contener el nombre de un componente (que debe ser un literal de caracteres) o un nombre de campo que contenga el nombre de un componente (que debe ser de caracteres). El factor 2 debe contener el nombre del atributo que se est recuperando (que debe ser un literal de caracteres) o un nombre de campo que contenga el nombre de un atributo (que debe ser de caracteres). El factor 1 y el factor 2 no pueden contener caracteres grficos. El campo del resultado debe contener el nombre del campo que contiene el valor recuperado del atributo. El tipo del campo del resultado debe ser el mismo que el tipo del atributo. Para manejar las excepciones de GETATR puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48. Nota: La operacin GETATR no afecta a los campos del programa correspondientes a los componentes. Si desea que el campo del programa correspondiente al componente contenga el valor actual del campo de entrada, haga que ste sea el destino de la operacin.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq... C Extended-factor2++++++++++++++++++++++++++++ C* C* Recuperar el tipo de un componente denominado MLE01. C* C 'MLE01' GETATR 'PartType' Mle
456
GOTO (Ir a)
Cdigo GOTO Factor 1 Factor 2 Etiqueta Campo de resultado Indicadores
La operacin GOTO permite saltar operaciones de clculo dando instrucciones al programa para que vaya a (o bifurque a) una etiqueta especificada del programa. Una operacin TAG contiene el destino de una operacin GOTO. El TAG puede ir detrs o delante de GOTO. Puede emitirse GOTO dentro de una subrutina del procedimiento principal para ir a una operacin TAG dentro de la misma subrutina. Puede emitirse GOTO dentro de una subrutina de un subprocedimiento para ir a una operacin TAG dentro de la misma subrutina o dentro del cuerpo del subprocedimiento. El factor 2 debe contener la etiqueta a la que el programa se bifurcar. Dicha etiqueta se entra en el factor 1 de una operacin TAG o ENDSR. La etiqueta debe ser un nombre simblico exclusivo. Para una descripcin de la operacin TAG, consulte TAG (Etiqueta) en la pgina 548.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* Si el indicador 10, 15 20 est activado, el programa se bifurca C* a la etiqueta TAG especificada en las operaciones GOTO. C* C 10 GOTO RTN1 C* C* C 15 GOTO RTN2 C* C RTN1 TAG C* C : C : C : C 20 GOTO END C* C : C : C : C END TAG
IF (Si)
Cdigo IF (M/R) Factor 1 Blanco Factor ampliado 2 Expresin
La operacin IF permite procesar una serie de cdigos de operacin si se cumple una condicin dada. Su funcin es similar a la del cdigo de operacin IFxx. Se diferencia en que la condicin lgica se describe en una expresin de la entrada del
457
Factor 2 ampliado. Las operaciones controladas por la operacin IF se efectan cuando se cumple la expresin del campo de factor ampliado 2. Si desea obtener informacin acerca de cmo utilizar los ampliadores de operacin M y R, consulte la seccin Reglas de precisin para operaciones numricas en la pgina 358. En el apartado Operaciones de comparacin en la pgina 375 se describen las normas para especificar las operaciones de comparacin.
CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++.. C Extended-factor2-continuation+++++++++++++++ C* Las operaciones controladas por la operacin IF se realizan C* cuando la expresin es verdadera. Es decir, A es mayor a 10 y el C* indicador 20 est activado. C C IF A>10 AND *IN(20) C : C ENDIF C* C* Las operaciones controladas por la operacin IF se realizan C* cuando Date1 representa una fecha posterior a Date2 C C IF Date1 > Date2 C : C ENDIF C*
IFxx (Si)
Cdigo IFxx Factor 1 Comparando Factor 2 Comparando Campo de resultado Indicadores
La operacin IFxx permite que se procese un grupo de clculos si se da una determinada relacin, especificada por xx, entre los factores 1 y 2. Cuando se utilizan las operaciones ANDxx y ORxx con IFxx, se procesa el grupo de clculos si se cumple la condicin especificada por las operaciones combinadas. (Si desea conocer el significado de xx, consulte el apartado Operaciones de programacin estructuradas en la pgina 390.) El factor 1 y el factor 2 deben contener un literal, una constante con nombre, una constante figurativa, un nombre de tabla, un elemento de matriz, un nombre de estructura de datos o un nombre de campo. Las entradas del factor 1 y del factor 2 deben ser del mismo tipo de datos. Si la relacin especificada por la operacin IFxx y cualquier operacin ANDxx u ORxx asociada no existe, el control se cede a la operacin de clculo que sigue inmediatamente a la operacin ENDIF asociada. Si se especifica tambin una operacin ELSE, el control pasa a la primera operacin de clculo que se puede procesar despus de la operacin ELSE. Las entradas de indicador de condicionamiento en la operacin ENDIF asociada con IFxx deben estar en blanco.
458
Debe utilizarse una sentencia ENDIF para cerrar un grupo IFxx. Si una sentencia ELSE sigue a una sentencia IFxx, se necesita una sentencia ENDIF tras la sentencia ELSE, pero no tras la sentencia IFxx. Dispone de la opcin de sangrar sentencias DO, clusulas IF-ELSE y clusulas SELECT-WHENxx-OTHER en el listado de compilacin para facilitar su lectura. Consulte la ayuda en lnea del dilogo Proyecto>Opciones de creacin en el Diseador GUI para obtener una descripcin de las opciones de compilador. En el apartado Operaciones de comparacin en la pgina 375 se describen las normas para especificar las operaciones de comparacin.
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* Si FLDA es igual a FLDB, se procesa el clculo tras la operacin IFEQ C* Si FLDA no es igual a FLDB, el programa se bifurca a la C* operacin inmediatamente posterior al ENDIF. C C FLDA IFEQ FLDB C : C : C : C ENDIF C C* Si FLDA es igual a FLDB, se procesa el clculo tras la operacin IFEQ C* y el control pasa a la operacin inmediatamente posterior a la C* sentencia ENDIF. SI FLDA no es igual a FLDB, el control pasa a C* la sentencia ELSE y se procesa el clculo inmediatamente C* posterior. C C FLDA IFEQ FLDB C : C : C : C ELSE C : C : C : C ENDIF *...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* Si FLDA es igual a FLDB y mayor que FLDC o si FLDD es igual C* a FLDE y mayor que FLDF, se procesa el clculo posterior a C* la operacin ANDGT. Si no se da ninguna de las condiciones C* especificadas, el programa se bifurca a la operacin C* inmediatamente posterior a la sentencia ENDIF. C C FLDA IFEQ FLDB C FLDA ANDGT FLDC C FLDD OREQ FLDE C FLDD ANDGT FLDF C : C : C : C ENDIF
459
La operacin IN recupera un rea de datos. Si se especifica el factor 1, debe contener *LOCK. *LOCK indica que ningn otro programa puede actualizar o bloquear el rea de datos hasta que: v Se realice una operacin UNLOCK v Se realice una operacin OUT sin ninguna entrada en el factor 1 v El programa desbloquee de manera implcita el rea de datos cuando finalice el mismo. Si un rea de datos est bloqueada, otros programas la pueden leer pero no la pueden actualizar. El factor 2 es el nombre del rea de datos. Este es el nombre especificado en el campo del resultado de la operacin DEFINE o en la especificacin de definicin. Si el nombre se especifica en la operacin DEFINE (utilizando *DTAARA), se recuperan todas las reas de datos definidas en el programa. Para manejar las excepciones de IN (cdigo de estado de programa 401-421, 431 o 432), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48. Las posiciones 71-72 y 75-76 deben estar en blanco. Para ver una descripcin de las normas generales, consulte Operaciones de rea de datos en la pgina 376.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* TOTAMT, TOTGRS y TOTNET se definen como reas de datos. La operacin C* IN recupera todas las reas de datos definidas en el programa y las C* bloquea. El programa procesa los clculos y, despus, graba y C* desbloquea todas las reas de datos. C* Despus otros programas pueden utilizar las reas de datos. C* C *LOCK IN *DTAARA C ADD AMOUNT TOTAMT C ADD GROSS TOTGRS C ADD NET TOTNET C C OUT *DTAARA C C* C* Definir reas de datos C* C *DTAARA DEFINE TOTAMT 8 2 C *DTAARA DEFINE TOTGRS 10 2 C *DTAARA DEFINE TOTNET 10 2
460
ITER (Iterar)
Cdigo ITER Factor 1 Factor 2 Campo de resultado Indicadores
La operacin ITER transfiere el control dentro de un grupo DO o FOR a la sentencia ENDDO o ENDFOR del grupo DO. Puede utilizarse en bucles DO, DOU, DOUxx, DOW, DOWxx y FOR para transferir inmediatamente el control a la sentencia ENDDO o ENDFOR del bucle. Hace que se ejecute inmediatamente la siguiente iteracin del bucle. ITER tiene efecto sobre el bucle ms interno. Si se especifican indicadores de condicionamiento en la sentencia ENDDO o ENDFOR a la que se pasa el control y no se cumple dicha condicin, el proceso contina en la sentencia que sigue a la operacin ENDDO o ENDFOR. La operacin LEAVE es similar a la operacin ITER; no obstante, LEAVE transfiere el control a la sentencia que sigue a la operacin ENDDO o ENDFOR.
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* El ejemplo siguiente utiliza un bucle DOU que contiene un C* bucle DOW. La sentencia IF comprueba el indicador 1. Si el C* indicador 01 est activado, se ejecuta la operacin LEAVE, C* transfiriendo el control del bucle DOW ms interno a la C* instruccin Z-ADD. Si el indicador 01 no est ACTIVADO, se procesa C* la operacin PROC1. Entonces se comprueba el indicador 12. C* Si est desactivado, ITER transfiere el control al ENDDO C* ms interno y se evala de nuevo la condicin del DOW. C* Si el indicador 12 est ACTIVADO, se procesa la subrutina PROC2. C C DOU FLDA = FLDB C : C NUM DOWLT 10 C IF *IN01 C LEAVE C ENDIF C EXSR PROC1 C *IN12 IFEQ *OFF C ITER C ENDIF C EXSR PROC2 C ENDDO C Z-ADD 20 RSLT 2 0 C : C ENDDO C :
461
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* El ejemplo siguiente utiliza un bucle DOU que contiene un C* bucle DOW. La sentencia IF comprueba el indicador 1. Si el C* indicador est ACTIVADO, se ejecuta la operacin MOVE, C* seguida de la operacin LEAVE, transfiriendo el control C* desde el bucle DOW ms interno a la instruccin Z-ADD. Si el C* indicador 01 no est ACTIVADO, ITER transfiere el control al C* ENDDO ms interno y la condicin DOW se evala de nuevo. C : C FLDA DOUEQ FLDB C : C NUM DOWLT 10 C *IN01 IFEQ *ON C MOVE 'UPDATE' FIELD 20 C LEAVE C ELSE C ITER C ENDIF C ENDDO C Z-ADD 20 RSLT 2 0 C : C ENDDO C :
La operacin KFLD indica que un campo forma parte de un argumento de bsqueda identificado por un nombre KLIST. La operacin KFLD puede especificarse en cualquier posicin de los clculos, pero debe seguir a una operacin KLIST o KFLD. No se permiten entradas de indicador de condicionamiento (posiciones 9 a 11). Las operaciones KFLD pueden ser globales o locales. Una operacin KLIST de un procedimiento principal slo puede tener operaciones KFLD globales asociadas. Una operacin KLIST de un subprocedimiento puede tener operaciones KFLD globales y locales. El factor 2 puede contener un indicador para un campo de clave con posibilidad de nulos si se especifica la opcin Control de usuario o la palabra clave ALWNULL(*USRCTL). Si el indicador est activado, se seleccionan los campos de clave con valores nulos. Si el indicador est desactivado o no se ha especificado, no se seleccionan los campos de clave con valores nulos. Consulte el apartado Operaciones por clave en la pgina 131 para obtener informacin sobre cmo acceder a las claves con posibilidad de nulos.
462
El campo de resultado debe contener el nombre de un campo que debe ser parte del argumento de bsqueda. El campo del resultado no puede contener un nombre de matriz. Cada campo de KFLD debe tener la misma longitud, tipo de datos y posiciones decimales que el campo correspondiente de la clave compuesta del registro o archivo. Sin embargo, si el registro tiene un campo de KFLD de longitud variable, el campo correspondiente de la clave compuesta debe ser variable pero no es necesario que tenga la misma longitud. No es necesario que cada campo de KFLD tenga el mismo nombre que el campo correspondiente de la clave compuesta. El orden en que los campos KFLD se especifican en la KLIST determina qu KFLD se asocia a un campo en particular de la clave compuesta. Por ejemplo, el primer campo KFLD que sigue a una operacin KLIST se asocia al campo situado ms a la izquierda (de orden superior) de la clave compuesta. Los campos de clave de tipo grfico y UCS-2 deben tener el mismo CCSID que la clave del archivo. La Figura 219 en la pgina 464 muestra un ejemplo de la operacin KLIST con operaciones KFLD.
La operacin KLIST da un nombre a una lista de KFLD. Dicha lista se utiliza como argumento de bsqueda para recuperar registros de los archivos descritos externamente que tienen una clave compuesta. Una clave compuesta es una clave que contiene una lista de campos de clave. Se crea de izquierda a derecha. El primer KFLD especificado es el campo ms a la izquierda (orden superior) de una clave compuesta. Una KLIST debe ir seguida inmediatamente por un KFLD como mnimo. Una KLIST finaliza al encontrarse una operacin no KFLD. Si un argumento de bsqueda se compone de ms de un campo (una clave compuesta), debe especificar una KLIST con varios KFLD. Puede utilizarse el mismo nombre de KLIST como argumento de bsqueda para varios archivos o puede utilizarse varias veces como argumento de bsqueda para el mismo archivo. El factor 1 debe contener un nombre exclusivo. Este nombre puede aparecer en el factor 1 de una operacin CHAIN, DELETE, READE, READPE, SETGT o SETLL. No se permiten entradas de indicador de condicionamiento (posiciones 9 a 11). Una operacin KLIST de un procedimiento principal slo puede tener operaciones KFLD locales asociadas. Una operacin KLIST de un subprocedimiento puede tener operaciones KFLD globales y locales.
463
*...1....+....2....+....3....+....4....+....5....+....6....+....7... A* Fuente DDS A R RECORD A FLDA 4 A SHIFT 1 0 A FLDB 10 A CLOCK# 5 0 A FLDC 10 A DEPT 4 A FLDD 8 A K DEPT A K SHIFT A K CLOCK# A* A* Fin de Fuente DDS A* A*********************************************************************** *...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* La operacin KLIST indica el nombre, FILEKY, por el que puede C* especificarse el argumento de bsqueda. C FILEKY KLIST C KFLD DEPT C KFLD SHIFT C KFLD CLOCK#
La operacin LEAVE transfiere el control de un grupo DO o FOR a la sentencia que sigue a la operacin ENDDO o ENDFOR. Puede utilizar LEAVE en un bucle DO, DOU, DOUxx, DOW, DOWxx o FOR para transferir inmediatamente el control del bucle ms interno a la sentencia que sigue a la operacin ENDDO o ENDFOR del bucle ms interno. Cuando se utiliza LEAVE para abandonar un grupo DO o FOR no se incrementa el ndice. En bucles anidados, LEAVE hace que se transfiera el control un solo nivel hacia afuera. LEAVE no se permite fuera de un grupo DO o FOR. La operacin ITER es similar a la operacin LEAVE; no obstante, ITER transfiere el control a la sentencia ENDDO o ENDFOR.
464
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* El ejemplo siguiente utiliza un bucle infinito. Cuando el C* usuario teclea 'q', el control se transfiere a la operacin C* LEAVE, que a su vez transferir el control fuera del bucle C* a la operacin Z-ADD. C* C 2 DOWNE 1 C : C IF ANSWER = 'q' C LEAVE C ENDIF C : C ENDDO C Z-ADD A B C* C* El ejemplo siguiente utiliza un bucle DOUxx que contiene C* un DOWxx. La sentencia IF comprueba el indicador 1. Si est C* activado, se activa el indicador 99 y el control pasa a la C* operacin LEAVE fuera del bucle DOWxx. C* C* Se ejecuta una segunda instruccin LEAVE ya que el indicador 99 C* est activado, que a su vez transfiere el control fuera C* del bucle DOUxx C* C : C FLDA DOUEQ FLDB C NUM DOWLT 10 C *IN01 IFEQ *ON C SETON 99 C LEAVE C : C ENDIF C ENDDO C 99 LEAVE C : C ENDDO C :
Puede utilizar la operacin LEAVESR para salir de una subrutina desde cualquier punto de su interior. El control pasa a la operacin ENDSR de la subrutina. LEAVESR slo se permite dentro de una subrutina. La entrada de nivel de control (posiciones 7 y 8) puede ser SR o estar en blanco. Pueden especificarse entradas de indicador de condicionamiento (posiciones 9 a 11).
465
CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq... * C CheckCustName BEGSR C Name CHAIN CustFile * * Comprueba que el nombre identifique un cliente vlido * C IF not %found(CustFile) C EVAL Result = CustNotFound C LEAVESR C ENDIF * * Comprueba si el cliente disfruta del programa de descuentos C IF Qualified = *OFF C EVAL Result = CustNotQualified C LEAVESR C ENDIF * * Si se llega hasta aqu, es que el cliente puede utilizar el * programa de descuentos C EVAL Result = CustOK C ENDSR
La operacin LOOKUP busca un elemento en una matriz o en una tabla. El argumento de bsqueda y la tabla o matriz deben tener el mismo tipo y la misma longitud (excepto los campos Fecha y Hora, que pueden tener una longitud distinta). Si la tabla o matriz es de tipo carcter, grfico o UCS-2 de longitud fija, el argumento de bsqueda debe ser tambin de longitud fija. En el caso de longitud variable, la longitud del argumento de bsqueda puede tener una longitud distinta a la de la matriz o tabla. Debe especificarse una secuencia para la tabla o matriz en la especificacin de definicin utilizando las palabras clave ASCEND o DESCEND. El factor 1 debe ser un literal, un nombre de campo, un elemento de matriz, un nombre de tabla, una constante con nombre o una constante figurativa. La naturaleza de la comparacin depende del tipo de datos: Datos grficos y UCS-2 La comparacin es hexadecimal. Datos numricos No se procesa la alineacin decimal. Otro tipo de datos Las consideraciones de comparacin descritas en Operaciones de comparacin en la pgina 375 son aplicables a otros tipos.
466
En una operacin LOOKUP en tabla, el argumento de bsqueda es el ltimo elemento seleccionado de la tabla en una operacin LOOKUP. Si la ltima operacin LOOKUP no se ha procesado, como argumento de bsqueda se utiliza el primer elemento de la tabla. Si se especifica el campo del resultado para una operacin LOOKUP en tabla, debe contener el nombre de una segunda tabla. La posicin de los elementos de la segunda tabla corresponde a la posicin de los elementos de la primera tabla. La operacin LOOKUP recupera el elemento de la segunda tabla. En una operacin LOOKUP en matriz, se puede utilizar un ndice. La operacin LOOKUP empieza por el elemento especificado en el ndice. El valor del ndice se establece al nmero de posicin del elemento localizado. Si el ndice es igual a cero o mayor que la cantidad de elementos de la matriz cuando empieza la bsqueda, se produce un error. El ndice se establece en 1 si la bsqueda no es satisfactoria. Si el ndice es una constante con nombre, el valor del ndice no se modifica. Deben especificarse indicadores de resultados para determinar la bsqueda que se ha de realizar y despus para reflejar el resultado de la bsqueda. Tambin debe especificarse en la especificacin de definicin una secuencia para la tabla o matriz utilizando las palabras clave ASCEND o DESCEND. Los indicadores especificados slo se activan si la bsqueda es satisfactoria. No pueden utilizarse ms de dos indicadores. Los indicadores de resultado pueden asignarse a las posiciones de igual y superior, o de igual e inferior. El programa busca una entrada que satisfaga cualquier condicin dando prioridad a la igualdad; es decir, si no se encuentra ninguna entrada igual, se selecciona la entrada inmediatamente menor o mayor. Si se especifica un indicador en las posiciones 75-76, la funcin incorporada %EQUAL devuelve 1 en el caso de que se encuentre un elemento que coincida exactamente con el argumento de bsqueda. La funcin incorporada %FOUND devuelve 1 en el caso de que una bsqueda especificada sea satisfactoria. Los indicadores de resultado pueden asignarse a las posiciones de igual e inferior o igual y superior. No se puede especificar superior e inferior en la misma operacin LOOKUP. El compilador supone la existencia de una matriz o tabla ordenada en secuencia cuando se especifica un indicador superior o inferior para la operacin LOOKUP. La operacin LOOKUP busca una entrada que satisfaga la condicin inferior/igual o superior/igual dando prioridad a la igualdad. v Superior (71-72): Da instrucciones al programa para que busque la entrada ms prxima al argumento de bsqueda que sea superior en la secuencia. La primera entrada mayor que se encuentre activa el indicador asignado a superior. v Inferior (73-74): Da instrucciones al programa para que busque la entrada ms prxima al argumento de bsqueda que sea inferior en la secuencia. La primera entrada de dicho tipo activa el indicador asignado a inferior. v Igual (75-76): Da instrucciones al programa para que busque la entrada igual al argumento de bsqueda. La primera entrada igual que se encuentra activa el indicador asignado a igual. Si el indicador de igual es el nico indicador especificado, se busca toda la matriz o tabla. Si la tabla o matriz est en orden ascendente y desea una comparacin de igualdad, especifique el indicador Superior. De este modo no se produce una bsqueda de toda la tabla o matriz.
467
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* En este ejemplo, el programador desea saber qu elemento de C* ARY localiza la operacin LOOKUP. La operacin Z-ADD establece C* el campo X en 1. LOOKUP empieza en el elemento de ARY indicado C* por el campo X y contina su proceso hasta encontrar el primer C* elemento igual a SRCHWD. El valor del ndice, X, se establece C* en el nmero de posicin del elemento localizado. C C Z-ADD 1 X 3 0 C SRCHWD LOOKUP ARY(X) 26 C C* En este ejemplo, el programador desea saber si se encuentra un C* elemento igual a SRCHWD. LOOKUP busca en ARY hasta encontrar el C* primer elemento igual a SRCHWD. Cuando esto ocurre, se activa C* el indicador 26 y se establece %EQUAL para que devuelva '1'. C C SRCHWD LOOKUP ARY 26 C C* LOOKUP empieza en un nmero de ndice de variable especificado C* por el campo X. El campo X no necesita establecerse en 1 antes de C* la operacin LOOKUP. Cuando LOOKUP localiza el primer elemento de C* ARY igual a SRCHWD, se activa el indicador 26 y %EQUAL se C* establece para que devuelva '1'. El valor del ndice, X, se C* establece en el nmero de posicin del elemento localizado. C* C C SRCHWD LOOKUP ARY(X) 26
MOVE (Mover)
Cdigo MOVE (P) Factor 1 Atributos de datos Factor 2 Campo de origen Campo de resultado Campo de destino Indicadores + ZB
La operacin MOVE transfiere caracteres del factor 2 al campo del resultado. La transferencia comienza con el carcter ms a la derecha del factor 2. Cuando se mueven campos de fecha, hora o indicacin de la hora, el factor 1 debe estar en blanco a menos que el origen o el destino sea un campo numrico o de caracteres. De lo contrario, el factor 1 contiene el formato de fecha o de hora compatible con el campo numrico o de caracteres que es el origen de la operacin. Para obtener informacin acerca de los formatos que pueden utilizarse, consulte los apartados Datos de fecha en la pgina 112, Datos de hora en la pgina 126 y Datos de indicacin de la hora en la pgina 128. Si el origen o el destino es un campo de caracteres, puede indicar el separador que sigue al formato en el factor 1. Slo se permiten los separadores que son vlidos para ese formato.
468
Si el factor 2 es *DATE o UDATE y el resultado es un campo de fecha, no se requiere el factor 1. Si el factor 1 contiene un formato de fecha, debe ser compatible con el formato de *DATE o UDATE, como se especifica en la palabra clave DATEDIT en la especificacin de control. Cuando se transfieren datos de tipo carcter, grfico, UCS-2 o numrico si el factor 2 es mayor que el campo de resultado, no se transfieren los caracteres o dgitos sobrantes ms a la izquierda de factor 2. Si el campo de resultado es mayor que el factor 2, permanecen intactos los caracteres o dgitos ms a la izquierda, a menos que se especifique que se rellenen. No puede especificar indicadores resultantes si el campo de resultado es una matriz; puede especificarlos si se trata de un elemento de una matriz o un campo que no es de una matriz. Si el factor 2 es ms corto que la longitud del campo de resultado, especificar una P en la posicin del ampliador de operacin provoca que se rellene por la izquierda el campo de resultado despus de que se produzca el movimiento. No se permiten los campos ni literales numricos flotantes como entradas de campo de resultado o de Factor 2. Si se especifica o se asume CCSID(*GRAPH : IGNORE) para el mdulo, no se permiten las operaciones MOVE entre los datos de tipo grfico y UCS-2. Al mover datos de tipo carcter, grfico o UCS-2 de longitud variable, el campo de longitud variable funciona de la misma forma que un campo de longitud fija con la misma longitud actual. Para obtener ejemplos al respecto, consulte las figuras 229 a 234. Las tablas que aparecen a continuacin de los ejemplos (consulte el apartado Ejemplos de MOVE (Parte 1) en la pgina 470) muestran cmo se mueven los datos del factor 2 al campo de resultado. Para obtener ms informacin acerca de la operacin MOVE, vea Operaciones Mover en la pgina 384.
469
a.
P H4 SN P H4 SN GX 4 B t GX 4 B t 1 2 7 8 4 2 5
1 2 3 4 5 6 7 8 4 1 2 3 4 P H 4 S N + 1 2 3 4 5 6 7 8 4 _ 1 2 3 4 7 8 4 2 4 1 2 3 4 5 6 7 8 9
b.
c.
Antes de MOVE
1 2 7 8 4 2 5 1 2 7 8 4 2 5 1 2 7 8 4 2 5 1 2 1 2 7 8 4 2 5
d.
Campo de resultado Antes de MOVE Despus de MOVE Antes de MOVE Despus de MOVE
5 6 7 8 4 P H4 SN + 5 6 7 8 4 7 8 4 2 4
A C E G PH 4 S N
b.
A C EGG X 4 B t A C EGG X 4 B t
c.
1 2 7 8 4 2 5 1 2 7 8 4 2 5
5 6 7 4 8 7 8 4 2 5
d. Numrico a carcter
1 2 7 8 4 2 5 1 2 7 8 4 2 5
P H4 SN 7 8 4 2 5
470
a.
Carcter a carcter
P H4 SN P H4 SN GX 4 Bt GX 4 Bt 1 2 7 8 4 2 5 1 2 7 8 4 2 5 1 2 7 8 4 2 5 1 2 7 8 4 2 5
1 2 3 4 5 6 7 8 4 PH 4 S N + 1 2 3 4 5 6 7 8 4 _ 0 0 0 0 7 8 4 2 4 1 2 3 4 5 6 7 8 9 0 0 1 2 7 8 4 2 5 A C F G PH 4 S N 1 2 7 8 4 2 5
Antes de MOVE Despus de MOVE Antes de MOVE Despus de MOVE Antes de MOVE Despus de MOVE
Factor 2 con la misma longitud que el campo de resultado Factor 2 a. Carcter a carcter Carcter a numrico Numrico a numrico
PH 4 SN PH 4 SN
b.
GX 4 Bt G X 4 B t
5 6 7 8 4 7 8 4 2 4
c.
7 8 4 2 5 7 8 4 2 5
A L T 5 F 7 8 4 2 5
d. Numrico a carcter
Nota: 4 = letra t
7 8 4 2 5 7 8 4 2 5
A L T 5 F 7 8 4 2 u
y 5 = letra u.
471
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... H* Formato de fecha de especificacin de control H* H DATFMT(*ISO) H DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++++++++++ D* D DATE_ISO S D D DATE_YMD S D DATFMT(*YMD) D INZ(D'1992-03-24') D DATE_EUR S D DATFMT(*EUR) D INZ(D'2197-08-26') D DATE_JIS S D DATFMT(*JIS) D NUM_DATE1 S 6P 0 INZ(210991) D NUM_DATE2 S 7P 0 D CHAR_DATE S 8 INZ('02/01/53') D CHAR_LONGJUL S 8A INZ('2039/166') D DATE_USA S D DATFMT(*USA) D* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+H1LoEq.. C* C* Mover entre campos Fecha. DATE_EUR contendr 24.03.1992 C* C MOVE DATE_YMD DATE_EUR C* C* Convierte un valor numrico en formato ddmmaa a Fecha *ISO. C* DATE_ISO contendr 1991-09-21 despus de cada uno de los 2 C* movimientos. C* C *DMY MOVE 210991 DATE_ISO C *DMY MOVE NUM_DATE DATE_ISO C* C* Traslada un valor de carcter que representa una fecha a *MDY C* a una Fecha *JIS. C* DATE_JIS contendr 1953-02-01 despus de cada uno de los dos C* movimientos. C* C *MDY/ MOVE '02/01/53' DATE_JIS C *MDY/ MOVE CHAR_DATE DATE_JIS
472
C* C* C* C C* C* C* C* C C* C* C* C* C* C* C* C* C* C* C* C C* C* C* C* C
Error de ejecucin, que provoca un cdigo de error 114. El Ao no est en el rango de fechas 1940 a 2039. DATE_YMD no se modificar. MOVE DATE_USA DATE_YMD
Mover un valor de caracteres que representa una fecha *CYMD a una fecha *USA. DATE_USA contendr 08/07/1961 despus del movimiento. 0 en *CYMD indica que el valor de caracteres no contiene separadores *CYMD0 MOVE CHAR_NO_SEP DATE_USA Mover un campo de fecha *EUR a un campo numrico que representar una fecha *CMDY. NUM_DATE2 contendr 2082697 despus del movimiento. *CMDY MOVE DATE_EUR NUM_DATE2 Mover un valor de caracteres que representa una fecha *LONGJUL a una fecha *YMD. DATE_YMD ser 39/06/15 despus del movimiento. *LONGJUL MOVE CHAR_LONGJUL DATE_YMD
473
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... H* Formato DATEDIT de especificacin de control H* H DATEDIT(*MDY) H* DName+++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++++++ D Jobstart S Z D Datestart S D D Timestart S T D Timebegin S T inz(T'05.02.23') D Datebegin S D inz(D'1991-09-24') D TmStamp S Z inz D* C* Establecer la indicacin de la hora Jobstart con la C* Fecha y Hora de inicio del trabajo C* C* El factor 1 de MOVE *DATE (*USA = MMDDYYYY) es coherente C* con el valor especificado para la palabra clave DATEDIT en C* la especificacin de control, puesto que DATEDIT(*MDY) indica C* que *DATE tiene el formato MMDDYYYY. C* C* Nota: No es necesario especificar el factor 1 con *DATE o C* UDATE. C* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. C *USA MOVE *DATE Datestart C TIME StrTime 6 0 C *HMS MOVE StrTime Timestart C MOVE Datestart Jobstart C MOVE Timestart Jobstart C* C* Despus de que se lleven a cabo las siguientes especificaciones C, el C* campo stampchar contendr '1991-10-24-05.17.23.000000'. C* C* Primero asigna una indicacin de la hora al valor de una hora C* determinada+15 minutos y una fecha determinada + 30 das. C* Mueve tmstamp a un campo de caracteres. El campo stampchar C* contendr '1991-10-24-05.17.23.000000'. C* C ADDDUR 15:*minutes Timebegin C ADDDUR 30:*days Datebegin C MOVE Timebegin TmStamp C MOVE Datebegin TmStamp C MOVE TmStamp stampchar 26 C* Mueve la indicacin de la hora a un campo de caracteres sin C* separadores. Despus de la operacin mover, C* STAMPCHAR contendr ' 19911024051723000000'. C *ISO0 MOVE(P) TMSTAMP STAMPCHAR0
474
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++ D* D* Ejemplo de MOVE entre campos grficos y de caracteres D* D char_fld1 S 8A inz('K1K2K3 ') D dbcs_fld1 S 4G D char_fld2 S 8A inz(*ALL'Z') D dbcs_fld2 S 3G inz(G'K1K2K3') D* C* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL C* C* El valor de dbcs_fld1 tras la operacin MOVE es 'K1K2K3 ' C* El valor de char_fld2 tras la operacin MOVE es 'ZZK1K2K3' C* C MOVE char_fld1 dbcs_fld1 C MOVE dbcs_fld2 char_fld2
Figura 229. Operacin MOVE de un campo de longitud variable a un campo de longitud variable
475
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++ D* D* Ejemplo de MOVE de longitud variable a longitud fija D* para campos de caracteres D* D var5 S 5A INZ('ABCDE') VARYING D var10 S 10A INZ('0123456789') VARYING D var15 S 15A INZ('FGH') VARYING D fix5a S 5A INZ('MNOPQ') D fix5b S 5A INZ('MNOPQ') D fix5c S 5A INZ('MNOPQ') D* D* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL C* C MOVE var5 fix5a C* fix5a = 'ABCDE' C MOVE var10 fix5b C* fix5b = '56789' C MOVE var15 fix5c C* fix5c = 'MNFGH'
Figura 230. Operacin MOVE de un campo de longitud variable a un campo de longitud fija
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++ D* D* Ejemplo de MOVE de longitud fija a longitud variable D* para campos de caracteres D* D var5 S 5A INZ('ABCDE') VARYING D var10 S 10A INZ('0123456789') VARYING D var15 S 15A INZ('FGHIJKL') VARYING D fix5 S 5A INZ('.....') D fix10 S 10A INZ('PQRSTUVWXY') D* D* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL C* C MOVE fix10 var5 C* var5 = 'UVWXY' (longitud=5) C MOVE fix5 var10 C* var10 = '01234.....' (longitud=10) C MOVE fix10 var15 C* var15 = 'STUVWXY' (longitud=7)
Figura 231. Operacin MOVE de un campo de longitud fija a un campo de longitud variable
476
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++ D* D* Ejemplo de MOVE(P) de longitud variable a longitud variable D* para campos de caracteres D* D var5a S 5A INZ('ABCDE') VARYING D var5b S 5A INZ('ABCDE') VARYING D var5c S 5A INZ('ABCDE') VARYING D var10 S 10A INZ('0123456789') VARYING D var15a S 15A INZ('FGH') VARYING D var15b S 15A INZ('FGH') VARYING D var15c S 15A INZ('FGH') VARYING D* D* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL C* C MOVE(P) var15a var5a C* var5a = 'FGH ' (longitud=5) C MOVE(P) var10 var5b C* var5b = '56789' (longitud=5) C MOVE(P) var5c var15b C* var15b = 'CDE' (longitud=3) C MOVE(P) var10 var15c C* var15c = '789' (longitud=3)
Figura 232. Operacin MOVE(P) de un campo de longitud variable a un campo de longitud variable
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++ D* D* Ejemplo de MOVE(P) de longitud variable a longitud fija D* para campos de caracteres D* D var5 S 5A INZ('ABCDE') VARYING D var10 S 10A INZ('0123456789') VARYING D var15 S 15A INZ('FGH') VARYING D fix5a S 5A INZ('MNOPQ') D fix5b S 5A INZ('MNOPQ') D fix5c S 5A INZ('MNOPQ') D* D* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL C* C MOVE(P) var5 fix5a C* fix5a = 'ABCDE' C MOVE(P) var10 fix5b C* fix5b = '56789' C MOVE(P) var15 fix5c C* fix5c = 'FGH '
Figura 233. Operacin MOVE(P) de un campo de longitud variable a un campo de longitud fija
477
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++ D* D* Ejemplo de MOVE(P) de longitud fija a longitud variable D* para campos de caracteres D* D var5 S 5A INZ('ABCDE') VARYING D var10 S 10A INZ('0123456789') VARYING D var15a S 15A INZ('FGHIJKLMNOPQR') VARYING D var15b S 15A INZ('FGHIJ') VARYING D fix5 S 5A INZ('') D fix10 S 10A INZ('PQRSTUVWXY') D* D* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL C* C MOVE(P) fix10 var5 C* var5 = 'UVWXY' (longitud=5 antes y despus) C MOVE(P) fix10 var10 C* var10 = 'PQRSTUVWXY' (longitud=10 antes y despus) C MOVE(P) fix10 var15a C* var15a = ' PQRSTUVWXY' (longitud=13 antes y despus) C MOVE(P) fix10 var15b C* var15b = 'UVWXY' (longitud=5 antes y despus)
Figura 234. Operacin MOVE(P) de un campo de longitud fija a un campo de longitud variable
478
Tabla 40. Mover un campo de caracteres a un campo de fecha/hora. El factor 1 especifica el formato de la entrada del factor 2. (continuacin)
*ISO Blanco *ISO 24:00.00 1991-09-14-13.12.56.123456 1991-09-14-13.12.56.123456 12:00 AM 1991-09-1413.12.56.123456 1991-09-1413.12.56.123456 *T(*USA) Z(*ISO) Z(*ISO)
Tabla 41. Mover un campo numrico a un campo de fecha/hora. El factor 1 especifica el formato de la entrada del factor 2.
Campo de resultado Factor 1 *MDY *JUL *YMD *USA (Vase nota 1) *ISO *JUL *MDY *CYMD *CMDY *CDMY *LONGJUL *USA Blanco *MDY *HMS *EUR *JIS *ISO Blanco (Vase nota 4) Factor 2 (Numrico) 111975 92114 140128 12319999 20360521 45333 030533 1210708 1070821 1080721 2021189 *DATE (092195) (Vase nota 3) *DATE (092195) (Vase nota 3) UDATE (092195) (Vase nota 3) 231256 111007 141618 240000 19910914131256123456 Valor 75/323 23/04/92 01/28/2014 31.12.9999 21/05/36 11/29/1945 03.05.33 08.07.2021 21-07-08 07/08/2021 08/07/2021 1995-09-21 1995-09-21 21.09.1995 23.12.56 11:10:07 14.16.18 12:00 AM 1991-09-14-13.12.56.123456 Tipo DTZ D(*JUL) D(*DMY) D(*USA) D(*EUR) D(*DMY&) D(*USA) D(*MDY.) D(*EUR) D(*YMD-) D(*USA) D(*EUR) D(*JIS) D(*JIS) D(*EUR) T(*ISO) T(*JIS) T(*HMS.) T(*USA) Z(*ISO)
479
Tabla 41. Mover un campo numrico a un campo de fecha/hora. El factor 1 especifica el formato de la entrada del factor 2. (continuacin)
Notas: 1 2 3 No se permite el formato de hora *USA para movimiento entre horas y clases numricas. No se permite un separador de cero (0) en el factor 1 para el movimiento entre campos de fecha, hora o indicacin de la hora y clases numricas. Para *DATE y UDATE, suponga que la fecha del trabajo en la descripcin del trabajo es de formato *MDY y contiene 092195. El factor 1 es opcional y tomar por omisin el formato correcto. Si el factor 2 es *DATE y el factor 1 est codificado, debe ser un formato de fecha con un ao de cuatro dgitos. Si el factor 2 es UDATE y el factor 1 est codificado, debe ser un formato de fecha con un ao de 2 dgitos. Para movimientos de campos de indicacin de la hora, el factor 1 es opcional. Si est codificado, debe ser *ISO o *ISO0.
480
La tabla siguiente muestra ejemplos de operaciones de mover campos de fecha-hora a campos de fecha-hora. Suponga que el valor inicial de la indicacin de la hora es: 1985-12-03-14.23.34.123456.
Tabla 44. Mover campos de fecha-hora a campos de fecha-hora
Factor 2 Factor 1 N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A Valor 1986-06-24 23 07 12 11:53 PM 19.59.59 1985-12-0314.23.34.123456 75.06.30 09/23/2234 18,45,59 2:00 PM 1985-12-0314.23.34.123456 1985-12-0314.23.34.123456 1985-12-0314.23.34.123456 Tipo DTZ D(*ISO) D(*DMY&) T(USA) T(*HMS) Z(*ISO.) D(*YMD) D(*USA) T(*HMS,) T(*USA) Z(*ISO.) Z(*ISO.) Z(*ISO.) Campo de resultado Valor 86/06/24 23.07.2012 23.53.00 19:59:59 1985-12-0314.23.34.123456 1975-06-3014.23.34.123456 2234-09-2314.23.34.123456 1985-12-0318.45.59.000000 1985-12-0314.00.00.000000 12/03/85 12/03/1985 14:23:34 Tipo DTZ D(*YMD) D(*EUR) T(*EUR) T(*JIS) Z(*ISO) Z(*ISO) Z(*ISO) Z(*ISO) Z(*ISO) D(*MDY) D(*USA) T(*HMS)
481
La tabla siguiente muestra ejemplos de operaciones de mover un campo de hora a un campo numrico. El campo de resultado es mayor que el factor 2. Suponga que el Factor 1 contiene *ISO y que el campo de resultado est definido como:
D Result_Fld 20S INZ(11111111111111111111)
Tabla 47. Mover un campo numrico a un campo de hora. El factor 2 es mayor que el campo de resultado. La parte resaltada muestra la parte del campo de factor 2 que se mueve.
Campo de resultado Cdigo de operacin MOVE MOVEL Factor 2 11:12:13:14 11:12:13:14 Tipo DTZ T(*EUR) T(*EUR) Valor 12.13.14 11.12.13
482
Tabla 48. Mover un campo numrico a un campo de indicacin de la hora. El factor 2 es mayor que el campo de resultado. La parte resaltada muestra la parte del campo de factor 2 que se mueve.
Campo de resultado Cdigo de operacin MOVE MOVEL Factor 2 12340618230323123420123456 12340618230323123420123456 Tipo DTZ Z(*ISO) Z(*ISO) Valor 1823-03-23-12.34.21.123456 1234-06-18-23-.03.23.123420
La operacin MOVEA transfiere valores de tipo carcter, grfico, UCS-2 o numrico desde el factor 2 al campo de resultado. (Se aplican ciertas limitaciones cuando se mueven valores numricos). Puede utilizarse la operacin MOVEA para: v Mover varios elementos de matriz contiguos a un solo campo v Mover un solo campo a varios elementos de matriz contiguos v Mover elementos de matriz contiguos a elementos contiguos de otra matriz. Mover datos empieza por el primer elemento de una matriz si la matriz no est indexada o por el elemento especificado si la matriz est indexada. Mover datos finaliza cuando se ha movido o rellenado el ltimo elemento de matriz. Cuando el campo del resultado contiene la matriz de indicador, el listado de referencias cruzadas contiene todos los indicadores afectados por la operacin MOVEA. El factor 2 del campo del resultado debe contener una matriz. La matriz puede ser una matriz empaquetada, binaria, con zona, grfica o de caracteres. El factor 2 y el campo de resultado no pueden especificar la misma matriz aunque la matriz est indexada. Nota: En las operaciones MOVEA de tipo carcter, grfico, UCS-2 y numrico puede especificar el ampliador de operacin P para que rellene el resultado a partir de la derecha.
483
numricos, elementos de matriz numrica o matrices numricas. Como mnimo uno debe ser una matriz o elemento de matriz. Los tipos numricos pueden ser binario, decimal empaquetado o decimal con zona. Los tipos numricos no tienen que ser iguales entre el factor 2 y el campo del resultado. El factor 2 puede contener un literal numrico si el campo de resultado contiene una matriz numrica o un elemento de matriz numrica: v El literal numrico no puede contener una coma decimal. v La longitud del literal numrico no puede ser mayor que la longitud de elemento del elemento de matriz especificado en el campo de resultado. Se ignoran las posiciones decimales al mover. Los valores numricos no se convierten para representar las diferencias en el nmero de posiciones decimales definidas. Si el campo del resultado contiene una matriz numrica, el factor 2 no puede contener las constantes figurativas *BLANK, *ALL, *ON ni *OFF.
484
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C MOVEA ARRX ARRY C* Mover de matriz a matriz. Sin indexacin; distinta longitud de matriz, C* misma longitud de elementos.
ARRY AA BBCCDD E EF F
Un elemento
Un elemento
. 12 34 5 6 7 8 9 0
Despus de 1 2 3 4 5 6 7 8 9 0 . F F MOVEA
Figura 235. Matriz a matriz - Longitud de matriz distinta, longitud de elemento idntica
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C MOVEA ARRX ARRY(3) C* Mover de matriz a matriz con un campo de resultado indexado.
ARRY AA BBCCDD E E
Un elemento
Un elemento
. Despus de A A B B 1 2 3 4 5 6 12 34 5 6 7 8 9 0 MOVEA
485
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C MOVEA ARRX ARRY C* Mover de matriz a matriz, sin indexacin y con elementos de C* matriz de distinta longitud.
ARRY A A A B B B C C C DDD
Un elemento
Un elemento
. Despus de 1 2 3 4 5 6 7 8 9 0 . DD 12 34 5 6 7 8 9 0 MOVEA
Un elemento
Un elemento
. 12 34 5 6 7 8 9 0
486
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C MOVEA FIELDA ARRY C* Mover de campo a matriz, sin indexacin en la matriz.
FIELDA 12 34 5 6 7
Antes de MOVEA
ARRY . ABC 9 8 6 5 4 3 2 1 0
Un elemento
12 34 5 6 7
Despus de 1 2 3 4 5 6 7 1 0 . A BC MOVEA
ARRY . 1 0 . A0 . 2 0 . B 0 . 30 . C 0
Antes de MOVEA
FIELD . 1 0 . A 0
Un elemento
. 1 0 . A0 . 2 0 . B 0 . 30 . C 0
Despus de MOVEA
. 2 0 . B 0
487
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C MOVEA ARRB ARRZ C* C* Mover de matriz a matriz y mostrar elementos numricos.
. 1.0
1.1
1.2
. 1.0
Antes de MOVEA
. 2.0
. 3.0
. 4.0
. 5.0
. 6.0
Un elemento
Un elemento
. 1.0
1.1
1.2
. 1.0
Despus de MOVEA
. 1.0
1.1 1.2
. . 6.0 1.0
ARRY AA BBCCDD E EF F
Un elemento
Un elemento
. Despus de 1 2 3 4 5 6 7 8 9 0 . 12 34 5 6 7 8 9 0 MOVEA
. 1.0
1.1
1.2
. 1.0
Antes de MOVEA
. 2.0
. 3.0
. 4.0
. 5.0
. 6.0
Un elemento
Un elemento
. 1.0
1.1
1.2
. 1.0
1.1
1.2
1.3
. . 0.0
488
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C MOVEA(P) ARRX(3) ARRY C* Mover de matriz a matriz con relleno. Sin indexacin; matriz de C* distinta longitud con distinta longitud de elemento.
ARRX P P PQQQR R R
Antes de MOVEA
ARRY AA BBCCDD E EF F
Un elemento
Un elemento
P P PQQQR R R
Despus de R R R MOVEA
La operacin MOVEL transfiere caracteres del factor 2 al campo del resultado. La transferencia empieza por el carcter situado ms a la izquierda en el factor 2. Si se especifica el factor 1, debe contener un formato de fecha o de hora. Esto especifica el formato del campo de caracteres o numrico que es el origen o el destino de la operacin. No pueden especificarse indicadores resultantes si el campo del resultado es una matriz. Puede especificarlos si el campo de resultado es un elemento de matriz o un campo que no es de matriz. Si el origen o el destino es un campo de caracteres, puede indicar el separador que sigue al formato en el factor 1. Slo se permiten los separadores que son vlidos para ese formato. Si el factor 2 es *DATE o UDATE y el resultado es un campo de fecha, no se requiere el factor 1. Si el factor 1 contiene un formato de fecha, debe ser compatible con el formato *DATE o UDATE en factor 2, como se especifica en la palabra clave DATEDIT en la especificacin de control. Si el factor 2 es mayor que el campo de resultado, no se transfieren los caracteres sobrantes ms a la derecha de factor 2. Si el campo del resultado es mayor que el factor 2, el exceso de caracteres situados ms a la derecha del campo del resultado no se modifican, a menos que se especifique un relleno. No se permiten los campos ni literales numricos flotantes como Factor 2.
489
Si el factor 2 es de tipo UCS-2 y el campo de resultado es de tipo carcter, o si el factor 2 es de tipo carcter y el campo de resultado es de tipo UCS-2, el nmero de caracteres que se mueven es variable. Por ejemplo, cinco caracteres UCS-2 pueden convertirse a: v Cinco caracteres de un solo byte v Cinco caracteres de byte doble v Una combinacin de caracteres de un solo byte y doble Nota: Al mover datos a un campo numrico, se conserva el signo (+ o ) del campo del resultado excepto cuando el factor 2 es igual o ms largo que el campo del resultado. En este caso, se utiliza el signo del factor 2 como signo del campo del resultado. Las siguientes secciones resumen las normas para la operacin MOVEL basndose en la longitud del factor 2 y del campo del resultado.
490
v Si el factor 2 y el campo del resultado son ambos de tipo grfico o UCS-2, slo se transfieren los caracteres de tipo grfico o UCS-2 necesarios para rellenar el campo del resultado. v Si el factor 2 es grfico y el campo del resultado es de caracteres, se truncan los datos grficos. v Si el factor 2 es de caracteres y el resultado es grfico, se truncan los datos de caracteres. Nota: El exceso de caracteres situados ms a la derecha del factor 2 no se transfieren. Si el campo del resultado es mayor que el factor 2, el exceso de caracteres situados ms a la derecha del campo del resultado no se modifican, a menos que se especifique un relleno.
491
a. Numrico a numrico
_ 7 8 4 2 5 _ 78 4 2 5
Antes de MOVE
Despus de MOVE
b. Numrico a carcter
7 8 4 2 4 _ _ 7 8 4 2 4
AK T 4 D
7 8 4 2 t + 5 6 7 8 4 _ 2 4 8 4 7
c.
Carcter a numrico
G X 4 Bt
GX4 Bt
P H 4 SN
A K T 4 D
d. Carcter a carcter
Antes de MOVE
P H 4 SN P H 4 SN
Despus de MOVE
a.
Numrico a _ Numrico 0 0 0 2 5 8 4 2 5
_ 9 0 3 1 7 8 4 2 5 _ 9 0 3 1 7 8 4 2 5
_ 0 0 0 2 5 8 4 2 5
Antes de MOVE
Despus de MOVE
0 00 2 5
b. Numrico a Carcter
AK T 4 D
9 0 3 1 7 + 5 6 7 8 4 _ 2 2 7 3 8
c. Carcter a Numrico
BRWC X H 4 S t
BRWC X H 4 S t
d. Carcter a Carcter
BRWC X H 4 S N BRWC X H 4 S N
A K T 4 D B RWCX
492
A.
Numrico a Numrico
7 8 4 2 5 7 8 4 2 5
C P T 5 E
Carcter a Numrico
Antes de MOVE
C P T 5 E _ 7 8 4 2 4 _ 7 8 4 2 4
Despus de MOVE
Numrico a Carcter
B. _
BRWC X H 4 S A
7 8 4 2 t H 4 S A
C P T 5 N
Carcter a Carcter
BRWC X H 4 S A C P T 5 NH 4 S A
C P T 5 N
493
Numrico a Numrico
A. _
_ 7 8 4 2 5
Despus de MOVE 7 8 4 2 5 0 0 0 0
+ 1 3 0 9 4 3 2 1 0 + 3 0 4 5 5 0 0 0 0
C P T 5 E
Carcter a Numrico
Antes de MOVE
C P T 5 E _ 7 8 4 2 4 _ 7 8 4 2 4
Despus de MOVE
Numrico a Carcter
B. _
BRWC XH 4 S A
7 8 4 2 t
C P T 5 N
Carcter a Carcter
Antes de MOVE
BRWC X H 4 S A
C P T 5 N
Despus de MOVE C P T 5 N
494
495
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++ D* D* Ejemplo de MOVEL de longitud fija a longitud variable D* para campos de caracteres D* D var5 S 5A INZ('ABCDE') VARYING D var10 S 10A INZ('0123456789') VARYING D var15a S 15A INZ('FGHIJKLMNOPQR') VARYING D var15b S 15A INZ('WXYZ') VARYING D fix10 S 10A INZ('PQRSTUVWXY') D* D* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL C* C MOVEL fix10 var5 C* var5 = 'PQRST' (longitud=5) C MOVEL fix10 var10 C* var10 = 'PQRSTUVWXY' (longitud=10) C MOVEL fix10 var15a C* var15a = 'PQRSTUVWXYPQR' (longitud=13) C MOVEL fix10 var15b C* var15b = 'PQRS' (longitud=4)
496
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++ D* D* Ejemplo de MOVEL(P) de longitud variable a longitud fija D* para campos de caracteres D* D var5 S 5A INZ('ABCDE') VARYING D var10 S 10A INZ('0123456789') VARYING D var15 S 15A INZ('FGH') VARYING D fix5a S 5A INZ('MNOPQ') D fix5b S 5A INZ('MNOPQ') D fix5c S 5A INZ('MNOPQ') D* D* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL C* C MOVEL(P) var5 fix5a C* fix5a = 'ABCDE' C MOVEL(P) var10 fix5b C* fix5b = '01234' C MOVEL(P) var15 fix5c C* fix5c = 'FGH '
MULT (Multiplicar)
Cdigo MULT (H) Factor 1 Multiplicando Factor 2 Multiplicador Campo de resultado Producto Indicadores + Z
Si se especifica el factor 1, ste se multiplica por el factor 2 y el producto se sita en el campo de resultado. Si no se especifica el factor 1, el factor 2 se multiplica por el campo de resultado y el producto se sita en el campo de resultado.
Captulo 25. Cdigos de operacin
497
El factor 1 y el factor 2 deben ser numricos y cada uno puede contener una matriz, un elemento de matriz, un campo, una constante figurativa, un literal, una constante con nombre, un subcampo o un nombre de tabla. El campo de resultado debe ser lo suficientemente grande para contener el producto. Utilice la norma siguiente para determinar la longitud mxima del campo del resultado: la longitud del campo del resultado es la longitud del factor 1 ms la longitud del factor 2. El campo de resultado debe ser numrico, pero no puede ser una constante con nombre o un literal. El resultado se puede redondear si se especifica. En el apartado Operaciones aritmticas en la pgina 367 se describen las normas generales para la especificacin de operaciones aritmticas. La Figura 162 en la pgina 368 muestra ejemplos de la operacin MULT.
La operacin MVR transfiere el resto de la operacin previa DIV a un campo nombrado en el campo del resultado. La operacin MVR debe seguir inmediatamente a la operacin DIV. Si utiliza indicadores de condicionamiento, la operacin MVR debe especificarse inmediatamente despus de la operacin DIV. El campo del resultado debe ser numrico y puede contener una matriz, un elemento de matriz, un subcampo o un nombre de tabla. Deje espacio suficiente en el campo de resultado si la operacin DIV utiliza factores con posiciones decimales. El nmero de posiciones decimales significativas es el mayor de: v El nmero de posiciones decimales en el factor 1 de la operacin de divisin previa. v La suma de las posiciones decimales del factor 2 y del campo de resultado de la operacin de divisin previa. El nmero mximo de posiciones numricas totales en el resto es igual al numero de posiciones totales en el factor 2 de la operacin de divisin previa. El signo (+ o -) del resto es el mismo que el del dividendo (factor 1). No puede especificar redondeo en una operacin DIV inmediatamente seguida por una operacin MVR. La operacin MVR no puede utilizarse si la operacin de divisin previa tiene una matriz especificada en el campo de resultado. Adems, no puede utilizarse la operacin MVR si la operacin DIV anterior tiene al menos un operando flotante. En el apartado Operaciones aritmticas en la pgina 367 se describen las normas generales para la especificacin de operaciones aritmticas. La Figura 162 en la pgina 368 muestra ejemplos de la operacin MVR.
498
La operacin OCCUR especifica la aparicin de la estructura de datos que se ha de utilizar a continuacin en un programa. Si en una operacin se especifica una estructura de datos con varias apariciones o un subcampo de dicha estructura de datos, se utiliza la primera aparicin de la estructura de datos hasta que se especifica una operacin OCCUR. Despus de especificar una operacin OCCUR, se utiliza la aparicin de la estructura de datos indicada por la operacin OCCUR. Si se especifica el factor 1, debe contener un nmero, un literal con cero posiciones decimales, un nombre de campo, una constante con nombre o un nombre de estructura de datos. El factor 1 establece la aparicin de la estructura de datos especificada en el factor 2. Si no se especifica el factor 1, el valor de la aparicin actual de la estructura de datos del factor 2 se sita en el campo del resultado durante la operacin OCCUR. Si el factor 1 es un nombre de estructura de datos, debe ser una estructura de datos de mltiples apariciones. La aparicin actual de la estructura de datos en el factor 1 se utiliza para establecer la aparicin de la estructura de datos en el factor 2. El factor 2 debe ser el nombre de una estructura de datos de mltiples apariciones. Si se especifica el campo del resultado, debe ser un nombre de campo numrico sin posiciones decimales. El valor de la aparicin actual de la estructura de datos especificada en el factor 2, despus de haberse establecido por cualquier valor o estructura de datos que se especifique opcionalmente en el factor 1, se sita en el campo del resultado. Nota: Debe especificarse como mnimo el factor 1 o el campo del resultado. Si la aparicin esta fuera del rango valido establecido para la estructura de datos, se produce un error y la aparicin de la estructura de datos en el factor 2 permanece igual que antes de procesar la operacin OCCUR. Para manejar las excepciones de OCCUR (cdigo de estado de programa 122), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48.
499
FLDA
FLDB
50 aparicin 49 aparicin
FLDC
FLDD
FLDA
FLDB
FLDC
FLDD
FLDA
FLDB
FLDC
FLDD
FLDA
FLDB
FLDC
FLDD
FLDA
FLDB
FLDC
FLDD
DS1
DS2
500
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D* D* DS1 y DS2 son estructuras de datos de mltiples apariciones. D* Cada una tiene 50 apariciones. D DS1 DS OCCURS(50) D FLDA 1 5 D FLDB 6 80 D* D DS2 DS OCCURS(50) D FLDC 1 6 D FLDD 7 11 *...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* DS1 se establece como la tercera aparicin. Ahora se pueden usar C* los subcampos FLDA y FLDB de la tercera aparicin. Las operaciones C* MOVE y Z-ADD modifican el contenido de FLDA y FLDB, C* respectivamente, en la tercera aparicin de DS1. C C 3 OCCUR DS1 C MOVE 'ABCDE' FLDA C Z-ADD 22 FLDB C* C* DS1 se establece como la cuarta aparicin. Usando los valores de C* FLDA y FLDB de la cuarta aparicin de DS1, la operacin MOVE C* coloca el contenido de FLDA en el campo de resultado, FLDX, C* y la operacin Z-ADD coloca el contenido de FLDB en el C* campo de resultado, FLDY. C C 4 OCCUR DS1 C MOVE FLDA FLDX C Z-ADD FLDB FLDY C* C* DS1 se establece como la aparicin especificada en el campo X. C* Por ejemplo, si X = 10, DS1 se establece como la dcima aparicin. C X OCCUR DS1 C* C* DS1 se establece como la aparicin actual de DS2. Por ejemplo, si C* la aparicin actual de DS2 es la dcimosegunda aparicin, DS1 C* se establece como la dcimosegunda aparicin. C DS2 OCCUR DS1
501
C* C* C* C* C* C C C* C* C* C* C* C C C* C* C* C* C* C* C C C C C
El valor de aparicin actual de DS1 se coloca en el campo de resultado, Z. El campo Z debe ser numrico sin posiciones decimales. Por ejemplo, si la aparicin actual de DS1 es 15, el campo Z contiene el valor 15. OCCUR DS1 Z DS1 se establece en la aparicin actual de DS2. A continuacin, el valor de la aparicin actual de DS1 se mueve al campo de resultado, Z. Por ejemplo, si la aparicin actual de DS2 es la quinta, DS1 se establece como la quinta aparicin. El campo de resultado, Z, contiene el valor 5. DS2 OCCUR DS1 Z
DS1 se establece como la aparicin actual de X. Por ejemplo, si X = 15, DS1 se establece como la decimoquinta aparicin. Si X es menor que 1 o mayor que 50, se produce un error y %ERROR se establece para que devuelva '1'. Si %ERROR devuelve '1', se activa el indicador LR. X OCCUR (E) DS1 IF %ERROR SETON ENDIF
LR
La operacin OPEN abre un archivo. El archivo puede ser un archivo local o un archivo AS/400. Si el archivo est definido como un archivo local y si no existe cuando se produce la operacin OPEN, se crea el archivo local. Deben existir los archivos remotos cuando se produce la operacin OPEN; de lo contrario, no se crean. El factor 2 contiene el nombre del archivo. El archivo no puede ser un archivo de tabla. Para permitir que el programa controle cundo debe abrirse el archivo, especifique la palabra clave USROPN en las especificaciones de descripcin de archivo. Consulte el apartado Captulo 17. Especificaciones de descripcin de archivo en la pgina 213 para obtener ms informacin acerca de la palabra clave USROPN. Si se abre un archivo y despus se cierra mediante una operacin CLOSE, se puede volver a abrir el archivo con la operacin OPEN. No es obligatoria la palabra clave USROPN en la especificacin de descripcin de archivo. Si no se especifica la palabra clave USROPN en la especificacin de definicin de archivo, el archivo se abre en la inicializacin del programa. Si se especifica una operacin OPEN para un archivo que ya est abierto, se produce un error. Son vlidas varias operaciones OPEN en un programa para el mismo archivo siempre que el archivo se haya cerrado con anterioridad a la operacin OPEN.
502
Si se especifica un indicador de resultado en las posiciones 73 y 74, se activa cuando se produce un error durante la operacin OPEN. Para manejar las excepciones de OPEN (cdigos de estado de archivo mayores que 1000), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones/errores de archivo en la pgina 37.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... FFilename++IT.A.FRlen+......A.Device+.Keywords+++++++++++++++++++++++++++++ FEXCEPTN O E DISK REMOTE USROPN FFILEX IF E DISK REMOTE *...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* La operacin OPEN explcita abre el archivo EXCEPTN para C* proceso si el indicador 97 est activado y el indicador 98 est C* desactivado. Observe que el archivo EXCEPTN de las especificaciones C* de descripcin de archivo tiene la palabra clave USROPN especificada. C* %ERROR devolver '1' si la operacin OPEN es anmala. C* C IF *en97 y no *en98 C OPEN(E) EXCEPTN C IF no %ERROR C WRITE ERREC C ENDIF C ENDIF C* C* FILEX se abre al inicializar el programa. La operacin CLOSE C* explcita cierra FILEX antes de que el control pase a RTNX. Al C* volver, la operacin OPEN vuelve a abrir el archivo. Debido a que C* la palabra clave USROPN no est especificada para FILEX, el archivo C* se abre durante la inicializacin del programa C* C CLOSE FILEX C CALL 'RTNX' C OPEN FILEX
ORxx (O)
Cdigo ORxx Factor 1 Comparando Factor 2 Comparando Campo de resultado Indicadores
La operacin ORxx es opcional con las operaciones DOUxx, DOWxx, IFxx, WHENxx y ANDxx. ORxx se especifica siguiendo de forma inmediata a una sentencia DOUxx, DOWxx, IFxx, WHENxx, ANDxx u ORxx. Utilice ORxx para especificar una condicin ms compleja para las operaciones DOUxx, DOWxx, IFxx y WHENxx. No se permiten entradas de indicadores de condicionamiento (posiciones de 9 a 11). El factor 1 y el factor 2 deben contener un literal, una constante con nombre, una constante figurativa, un nombre de tabla, un elemento de matriz, un nombre de
503
estructura de datos o un nombre de campo. El factor 1 y el factor 2 deben ser del mismo tipo. La comparacin de los factores 1 y 2 sigue las mismas normas dadas para las operaciones de comparacin. En el apartado Operaciones de comparacin en la pgina 375 se describen las normas generales para la especificacin de operaciones de comparacin. La Figura 200 en la pgina 438 muestra ejemplos de operaciones ORxx y ANDxx con una operacin DOUxx.
La operacin OTHER empieza la secuencia de operaciones que se ha de procesar si no se satisface ninguna condicin WHENxx o WHEN en un grupo SELECT. La secuencia finaliza con la operacin ENDSL o END. Normas a recordar al utilizar la operacin OTHER: v La operacin OTHER es opcional en un grupo SELECT. v Slo puede especificarse una operacin OTHER en un grupo SELECT. v No puede especificarse ninguna operacin WHENxx o WHEN tras una operacin OTHER en el mismo grupo SELECT. v La secuencia de operaciones de clculo en el grupo OTHER puede estar vaca; el efecto es el mismo que no especificar la sentencia OTHER. v No se permiten entradas de indicadores de condicionamiento (posiciones de 9 a 11). Para obtener ms informacin acerca de los grupos SELECT, consulte los apartados SELECT (Iniciar un grupo de seleccin) en la pgina 530 y WHENxx (Seleccionar cuando sea verdadero) en la pgina 559.
504
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* Ejemplo de un grupo SELECT con WHENxx y OTHER. Si X es igual a 1, C* realiza las operaciones de la secuencia 1; si X no es igual a 1 e Y C* es igual a 2, realiza las operaciones de la secuencia 2. Si no se C* cumple ninguna condicin, realiza las operaciones de la secuencia 3. C* C SELECT C X WHENEQ 1 C* C* Secuencia 1 C* C : C : C Y WHENEQ 2 C* C* Secuencia 2 C* C : C : C OTHER C* C* Secuencia 3 C* C : C : C ENDSL
La operacin OUT actualiza un rea de datos. Antes de que se pueda realizar una operacin OUT, una operacin IN (con *LOCK) debe haber bloqueado el rea o debe haberse especificado como una estructura de rea de datos en las especificaciones de definicin. Si se especifica el factor 1, debe contener *LOCK. El rea de datos permanece bloqueada despus de haberse actualizado. Si no se especifica el factor 1, el rea de datos se desbloquea despus de actualizarse. Si un rea de datos est bloqueada, otros programas la pueden leer pero no la pueden actualizar. El factor 2 es el nombre del rea de datos. Este es el nombre especificado en el campo del resultado de la operacin DEFINE o en la especificacin de definicin. Si se especifica el nombre en la operacin DEFINE (utilizando *DTAARA), se actualizan todas las reas de datos definidas en el programa. Si se especifica un indicador de resultado en las posiciones 73 y 74, se activa cuando se produce un error durante la operacin OUT.
505
Para manejar las excepciones de OUT (cdigo de estado de programa 401-421, 431 o 432), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48. Las posiciones 71-72 y 75-76 deben estar en blanco. Para ver una descripcin de las normas generales, consulte Operaciones de rea de datos en la pgina 376. Vea en la Figura 217 en la pgina 460 un ejemplo de la operacin OUT.
La operacin PARM define los parmetros que componen una lista de parmetros (PLIST). Las operaciones PARM deben situarse inmediatamente despus de la operacin PLIST, CALL, CALLB o START a la que hacen referencia. Las sentencias PARM han de estar en el orden en que las espera el programa o funcin llamados. El nmero mximo de parmetros que pueden especificarse es: v Para una operacin CALL, pueden especificarse hasta 255 parmetros v En una operacin CALLB, START (iniciar componente), PLIST, pueden especificarse un mximo de 399 parmetros. La Figura 260 en la pgina 509 ilustra la operacin PARM. Nota: Si est utilizando CALLP para llamar a un programa local, se definen los parmetros mediante la especificacin del prototipo en la especificacin de definicin. Las secciones Posiciones 24-25 (Tipo de definicin) en la pgina 233 y OPTIONS(*OMIT *VARSIZE *STRING *RIGHTADJ) en la pgina 252 describen cmo se especifican los parmetros para las operaciones CALLP. Si se especifica el factor 1, debe ser del mismo tipo que el campo del resultado. No puede ser un literal ni una constante con nombre. Puede estar en blanco si el campo del resultado contiene el nombre de una estructura de datos de mltiples apariciones. Si se especifica el factor 2, debe ser del mismo tipo que el campo del resultado. Puede estar en blanco si el campo del resultado contiene el nombre de una estructura de datos de mltiples apariciones. Si la comprobacin del tipo de parmetro es importante para la aplicacin, debe definir una definicin de interfaz de procedimiento y prototipo de la interfaz de llamada, en vez de utilizar las operaciones PLIST y PARM. El campo del resultado debe contener el nombre de un campo, una estructura de datos o una matriz: v Si se especifica una matriz, el rea definida para la matriz se pasa al programa o procedimiento llamado. v Si al programa llamado se pasa una estructura de datos con mltiples apariciones, todas las apariciones de la estructura de datos se pasan como un solo campo. No obstante, si se especifica un subcampo de una estructura de
506
datos de mltiple aparicin en el campo del resultado, slo la aparicin actual del subcampo pasa al programa o procedimiento llamado. El campo de resultado no puede contener un parmetro UCS-2 a menos que se llame a un programa del lenguaje principal. En operaciones que no son *ENTRY PLIST PARM, el campo del resultado puede contener el nombre de un elemento de matriz u *OMIT (slo para CALLB). Si se especifica *OMIT, el factor 1 y el factor 2 deben estar en blanco. En operaciones *ENTRY PLIST PARM, el campo del resultado no puede contener lo siguiente: v *IN, *INxx, *IN(xx), *OMIT v Una etiqueta, literal o constante con nombre v Un nombre de rea de datos o un nombre de estructura de datos de rea de datos v Una estructura de datos inicializada globalmente, una estructura de datos con subcampos inicializados o una estructura de datos con una matriz de tiempo de compilacin como un subcampo v Un nombre de tabla v Campos o estructuras de datos definidos con la palabra clave BASED v Un elemento de matriz v Un nombre de subcampo de estructura de datos v El nombre de una matriz de tiempo de compilacin v El nombre de un estado de programa o estructura de datos de informacin de archivo (INFDS) v No se permiten parmetros UCS-2. Nota: Un nombre de campo puede especificarse slo una vez en una *ENTRY PLIST. No se permiten entradas de indicadores de condicionamiento (posiciones de 9 a 11).
507
Cmo pasar los parmetros con las operaciones CALL, CALLB y START
Cuando se ejecuta una operacin CALL, CALLB o START (iniciar un componente), se produce lo siguiente: 1. En el programa de llamada, se copia el contenido del factor 2 de una operacin PARM en el campo del resultado de la misma operacin PARM. Si el campo del resultado de CALLB es *OMIT, se pasa una direccin nula al procedimiento llamado. 2. Despus de que el programa llamado reciba el control y despus de cualquier inicializacin normal del programa, el contenido del campo del resultado de una operacin PARM se copia en el campo del factor 1 de la misma operacin PARM. 3. Cuando se devuelve el control al programa de llamada, el contenido del factor 2 de una operacin PARM se copia en el campo del resultado de la misma operacin PARM. Este movimiento no se produce si el programa llamado finaliza anormalmente. 4. En la operacin START, el control se devuelve al programa de llamada tan pronto como se inicializa el componente de destino (despus de que se haya completado el proceso de *INZSR). Para el resto de los componentes de destino, el parmetro se puede acceder y modificar por los componentes de origen y de destino. 5. Al volver al programa de llamada, el contenido del campo del resultado de una operacin PARM se copia en el campo del factor 1 de la misma operacin PARM. Este movimiento no se produce si el programa llamado finaliza anormalmente o si se produce un error en la operacin de llamada.
La operacin PLIST define un nombre simblico exclusivo para una lista de parmetros que se ha de especificar en una operacin CALL CALLB, CALLP o START. La operacin PLIST debe ser inmediatamente seguida por, al menos, una operacin PARM. El factor 1 debe contener el nombre de la lista de parmetros. Si la lista de parmetros es la lista de parmetros de entrada, el factor 1 debe contener *ENTRY. Slo puede especificarse una lista de parmetros *ENTRY en un programa o funcin llamada. La lista de parmetros finaliza cuando se encuentra una operacin distinta de PARM. Si la comprobacin del tipo de parmetro es importante para la aplicacin, debe definir una definicin de interfaz de procedimiento y prototipo para la interfaz de llamada, en vez de utilizar las operaciones PLIST y PARM. No se permiten entradas de indicadores de condicionamiento (posiciones de 9 a 11).
508
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* En el programa de llamada, la operacin CALL llama a PROG1 y C* permite que PROG1 acceda a los datos de los campos de lista de C* parmetros. C CALL 'PROG1' PLIST1 C* C* En la segunda sentencia PARM, cuando se procesa CALL, el C* contenido del factor 2, *IN27, se coloca en el campo de resultado, C* BYTE. Cuando PROG1 devuelve el control, el contenido del campo C* de resultado, BYTE, se coloca en el campo del factor 1, *IN30. C* Tenga en cuenta que las entradas de los factores 1 y 2 son C* opcionales. C* C PLIST1 PLIST C PARM Amount 5 2 C *IN30 PARM *IN27 Byte 1 *...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C CALLB 'PROG2' . . . C* En este ejemplo, las operaciones PARM siguen inmediatamente a C* una operacin CALLB en lugar de a una operacin PLIST. C PARM Amount 5 2 C *IN30 PARM *IN27 Byte 1 . . . *...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* En la funcin llamada, PROG2, *ENTRY en el factor 1 de la sentencia C* PLIST la identifica como la lista de parmetros de entrada. C* Cuando el control pasa a PROG2, el contenido de los campos de C* resultado (FieldC y FieldG) de la lista de parmetros se coloca C* en los campos del factor 1 (FieldA y FieldD). Cuando la funcin C* llamada vuelve, el contenido de los campos del factor 2 de la C* lista de parmetros (FieldB y FieldE) se colocan en los campos de C* resultado (FieldC y FieldG). Todos los campos estn definidos C* en algn punto de la funcin llamada. C *ENTRY PLIST C FieldA PARM FieldB FieldC C FieldD PARM FieldE FieldG
POST (Anotar)
Cdigo POST (E) Factor 1 Factor 2 Nombre de archivo Campo de resultado Nombre INFDS Indicadores _ ER _
La operacin POST pone informacin en una estructura de datos de informacin de archivo (INFDS). En los archivos remotos, esta estructura contiene la informacin siguiente: v Informacin de retorno de archivo v Informacin de retorno de apertura
509
v Informacin de retorno de entrada/salida e informacin de retorno dependiente de dispositivo En los archivos locales, esta estructura contiene Informacin de Retorno de Archivo. Si se especifica el factor 2, debe contener el nombre de un archivo. Puede ser un archivo local o un archivo AS/400. Este archivo debe abrirse antes de una operacin POST. La informacin para este archivo se anota en su INFDS asociada. Si se especifica un archivo en el factor 2, el campo del resultado puede estar en blanco o puede contener el nombre de la INFDS asociada con el archivo. Si el campo del resultado est en blanco, se utiliza la INFDS asociada con el archivo especificado para la palabra clave INFDS en la especificacin de archivo. Si no se especifica el factor 2, el campo del resultado debe contener el nombre de estructura de datos que se ha utilizado para la palabra clave INFDS en la especificacin de archivo. El archivo debe abrirse antes de una operacin POST. Si un archivo se abre para el proceso de mltiples miembros, la Informacin de Retorno de Apertura se actualiza cuando una operacin como, por ejemplo, READ, READP, READE o READPE hace que se abra un nuevo miembro. Si los registros de entrada estn agrupados en bloques y no hay ninguna operacin POST en la aplicacin, se copia la clave actual y el nmero relativo de registro en la Informacin de Retorno de Entrada/Salida. Si los registros de entrada estn agrupados en bloques y hay una operacin POST en la aplicacin, entonces se actualiza la Informacin de Retorno de Entrada/Salida con la clave y nmero relativo de registro del registro actual del bloque. Si se especifica un indicador de resultado en las posiciones 73 y 74, se activa cuando se produce un error durante la operacin POST. Para manejar las excepciones de POST (cdigos de estado de archivo mayores que 1000), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones/errores de archivo en la pgina 37.
La operacin READ lee datos de un archivo, de un formato de registro o de una ventana. El archivo puede ser un archivo AS/400 remoto o un archivo local.
510
511
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* READ recupera el registro siguiente del archivo FILEA, que debe ser C* un archivo controlado en clculo. C* C* %EOF devolver '1' si se da un fin de archivo en READ C* o si se ha producido anteriormente y no se ha vuelto a posicionar C* el archivo. Cuando %EOF devuelve '1', el programa abandona C* el bucle. C* C DOW '1' C READ FILEA C IF %EOF C LEAVE C ENDIF C* C* READ recupera el registro siguiente del tipo REC1 (factor 2) C* de un archivo descrito externamente. (REC1 es un nombre de formato C* del registro.) Se activa el indicador 64 si se produce el fin de C* archivo en READ, o si se ha producido anteriormente y no se ha vuelto C* a situar el archivo. Cuando se activa el indicador 64, el programa C* abandona el bucle. El ampliador de cdigo de operacin N C* indica que el registro no est bloqueado. C* C READ(N) REC1 64 C 64 LEAVE C ENDDO
512
La operacin READC obtiene el siguiente registro modificado del componente de subarchivo. El factor 2 debe ser el nombre del componente de subarchivo. Si se especifica el campo del resultado, debe ser un nombre de campo numrico sin posiciones decimales. El nmero relativo de registro del registro recuperado se coloca en el campo del resultado. Para manejar las excepciones de READC (cdigos de estado de archivo mayores que 1000), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones/errores de archivo en la pgina 37. Puede especificar un indicador en las posiciones 75-76 que se activar cuando no haya ms registros cambiados en el subarchivo. Esta informacin tambin puede obtenerse a partir de la funcin incorporada %EOF que devuelve 1 si no hay ms registros cambiados y 0 en caso contrario. Si se especifica un indicador de fin de archivo (EOF), el indicador se activa cuando no hay ms registros cambiados en el subarchivo. Si la operacin no se ha realizado satisfactoriamente, no se modifican los campos del programa.
513
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... FFilename++IT.A.FRlen+......A.Device+.Keywords+++++++++++++++++++++++++++++ F* SUBCUST es un componente subarchivo que muestra una lista de registros F* del archivo CUSINFO. F* FCUSINFO UF E DISK REMOTE F CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* El subarchivo SUBCUST se ha cargado con los registros del archivo C* CUSINFO. Si hay cambios en alguno de los registros visualizados en el C* subarchivo, la operacin READC leer los registros cambiados C* uno por uno en el bucle DO WHILE. C* Se localizar el registro correspondiente en el archivo CUSINFO C* con la operacin CHAIN y se actualizar con el campo C* modificado. C* SCUSNO, SCUSNAM, SCUSADR y SCUSTEL son campos definidos en el C* subarchivo. CUSNAM, CUSADR y CUSTEL son campos definidos en un C* registro, CUSREC, definido a su vez en el archivo CUSINFO. C* C READC SUBCUST C DOW %EOF = *OFF C SCUSNO CHAIN (E) CUSINFO C* Actualiza el registro slo si lo encuentra en el archivo. C : C IF NOT %ERROR C EVAL CUSNAM = SCUSNAM C EVAL CUSADR = SCUSADR C EVAL CUSTEL = SCUSTEL C UPDATE CUSREC C ENDIF C READC (E) SUBCUST C ENDDO
La operacin READE recupera el siguiente registro secuencial de un archivo controlado en clculo (identificado por una F en la posicin 18 de las especificaciones de descripcin de archivo) si la clave del registro coincide con el argumento de bsqueda. Si la clave del registro no coincide con el argumento de bsqueda, se produce una condicin EOF y no se devuelve el registro al programa. Tambin se da una condicin EOF cuando se produce el fin de archivo. La operacin READE slo puede utilizarse con archivos AS/400. El factor 1, el argumento de bsqueda, es opcional e identifica el registro a recuperar. Puede ser un nombre de campo, un literal, una constante con nombre o una constante figurativa. En el factor 1 puede especificar un nombre KLIST para un archivo descrito externamente. Si el factor 1 se deja en blanco y la clave del registro siguiente es igual a la del registro actual, se recupera el siguiente registro
514
del archivo. La clave completa se define mediante el formato de registro o el archivo utilizado en el factor 2. Las claves de tipo grfico y UCS-2 deben tener el mismo CCSID. Si el archivo que se lee est definido como de actualizacin, se solicita un bloqueo temporal en el siguiente registro y el argumento de bsqueda se compara con la clave de ese registro. Si el registro ya est bloqueado, el programa debe esperar hasta que el registro est disponible antes de obtener el bloqueo temporal y realizar la comparacin. Si la comparacin da un resultado de desiguales, se produce una condicin EOF y se elimina el bloqueo temporal del registro. Si no se especifica ningn bloqueo (ampliador de operacin N), no se solicita un bloqueo temporal. El factor 2 debe contener el nombre del archivo o formato del registro a recuperar. Slo se permite un nombre de formato de registro en el factor 2 con un archivo descrito externamente (identificado por una E en la posicin 22 de las especificaciones de descripcin de archivo.) El campo de resultado puede contener el nombre de una estructura de datos a la que se traslada el registro ledo nicamente si el archivo nombrado en el factor 2 es un archivo descrito por programa (identificado por una F en la posicin 22 de las especificaciones de descripcin de archivo). Consulte el apartado Operaciones de archivos en la pgina 380 para obtener una descripcin de la forma en que se transfieren los datos entre el archivo y la estructura de datos. Para manejar las excepciones de READE (cdigos de estado de archivo mayores que 1000), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones/errores de archivo en la pgina 37. Puede especificar un indicador en las posiciones 75-76 que se activar si se da una condicin EOF: es decir, si no se encuentra un registro con una clave igual al argumento de bsqueda o si se encuentra un fin de archivo. Esta informacin puede obtenerse tambin a partir de la funcin incorporada %EOF, que devuelve 1 si se produce una condicin EOF y 0 en caso contrario. Si la operacin READE no se realiza satisfactoriamente, no se modifican los campos del programa y el archivo debe volverse a situar (por ejemplo, utilizando CHAIN, SETLL o SETGT). *START y *END pueden utilizarse para situar el archivo. Para obtener ms informacin acerca de la posicin de archivo, consulte el apartado Posicin de archivo en la pgina 6. Una operacin READE con el factor 1 especificado situada inmediatamente a continuacin de una operacin OPEN o una condicin EOF, recupera el primer registro del archivo si la clave del registro coincide con el argumento de bsqueda. Una operacin READE sin un factor 1 especificado situada inmediatamente a continuacin de una operacin OPEN o una condicin EOF, da como resultado un error. Se activa el indicador de error de las posiciones 73 y 74, si se ha especificado, o se activa el ampliador E seleccionado con %ERROR, si se ha especificado. No pueden emitirse ms operaciones de E/S en el archivo hasta que se haya cerrado y vuelto a abrir satisfactoriamente.
515
Consulte el apartado Soporte de valores nulos de base de datos en la pgina 128 para obtener informacin sobre la lectura de registros con campos con capacidad de nulos.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* Con el factor 1 especificado... C* C* La operacin READE recupera el registro siguiente del archivo C* FILEA y compara su clave con el argumento de bsqueda, KEYFLD. C* La funcin incorporada %EOF devolver '1' si KEYFLD no C* es igual a la clave del registro ledo o si se encuentra el fin de C* archivo. C* C KEYFLD READE FILEA C* C* La operacin READE recupera el registro siguiente de tipo REC1 C* de un archivo descrito externamente y compara la clave del registro C* ledo con el argumento de bsqueda, KEYFLD. (REC1 es un nombre de C* formato de registro.) Se activa el indicador 56 si KEYFLD no es igual C* a la clave del registro ledo o si se encuentra el fin de archivo. C* C KEYFLD READE REC1 56 C* C* Sin el factor 1 especificado... C* C* La operacin READE recupera el registro siguiente de la va de C* acceso del archivo FILEA si el valor de la clave es igual C* al valor de la clave del registro en la posicin del cursor C* actual. Si los valores de clave no son iguales, %EOF devolver '1'. C READE FILEA C* C* La operacin READE recupera el registro siguiente de la va de C* acceso del archivo FILEA si el valor de clave es igual al valor de C* clave del registro en la posicin actual. REC1 es un nombre de formato C* de registro. Se activa el indicador 56 si los valores de clave son C* desiguales. N indica que el registro no est bloqueado. C READE(N) REC1 56
La operacin READP lee el registro anterior de un archivo controlado en clculo (identificado por una F en la posicin 18 de las especificaciones de descripcin de archivo). El factor 2 debe contener el nombre de un archivo o formato de registro a leer. Un nombre de formato de registro en el factor 2 slo se permite con un archivo
516
descrito externamente. Si se especifica un nombre de formato de registro en el factor 2, el registro recuperado es el primer registro anterior del tipo especificado. Se ignoran los registros intermedios. El campo de resultado puede contener el nombre de una estructura de datos a la que se traslada el registro ledo nicamente si el archivo nombrado en el factor 2 es un archivo descrito por programa (identificado por una F en la posicin 22 de las especificaciones de descripcin de archivo). Consulte el apartado Operaciones de archivos en la pgina 380 para saber cmo se transfieren los datos entre el archivo y la estructura de datos. Si la operacin READP se realiza satisfactoriamente, el archivo se sita en el registro anterior que satisface la lectura. Si el archivo que se lee es un archivo de disco de actualizacin, puede especificarse el ampliador de operacin N para indicar que no debe colocarse ningn bloqueo en el registro cuando se lea. Para manejar las excepciones de READP (cdigos de estado de archivo mayores que 1000), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones/errores de archivo en la pgina 37. Puede especificar un indicador en las posiciones 75-76 que se activar cuando no existan registros anteriores en el archivo (condicin de inicio de archivo). Esta informacin puede obtenerse tambin a partir de la funcin incorporada %EOF, que devuelve 1 si se produce una condicin BOF y 0 en caso contrario. Debe volver a posicionar el archivo (por ejemplo, utilizando una operacin CHAIN, SETLL o SETGT) despus de un error o condicin BOF para procesar otras operaciones secuenciales satisfactorias (por ejemplo, READ o READP). Puede utilizar *START y *END para situar el archivo. Para obtener ms informacin acerca del posicionamiento de los archivos, consulte el apartado Posicin de archivo en la pgina 6 Consulte la seccin Soporte de valores nulos de base de datos en la pgina 128, si desea obtener informacin acerca de cmo leer registros con campos con posibilidad de nulos.
517
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* La operacin READP lee el registro anterior de FILEA. C* La funcin incorporada %EOF devolver '1' si se encuentra el principio C* de archivo. Cuando %EOF devuelve '1', el programa se bifurca C* a la etiqueta BOF especificada en la operacin GOTO. C* C READP FILEA C IF %EOF C GOTO BOF C ENDIF C* C* La operacin READP lee el siguiente registro anterior de tipo C* REC1 de un archivo descrito externamente. (REC1 es un nombre de C* formato de registro.) El indicador 72 se activa si se encuentra C* el inicio del archivo durante el proceso de la operacin READP. C* Cuando se activa el indicador 72, el programa se bifurca a la C* etiqueta BOF especificada en la operacin GOTO. C READP PREC1 72 C 72 GOTO BOF C* C BOF TAG
La operacin READPE recupera el siguiente registro secuencial anterior de un archivo controlado en clculo (identificado por una F en la posicin 18 de las especificaciones de descripcin de archivo) si la clave del registro coincide con el argumento de bsqueda. Si la clave del registro no coincide con el argumento de bsqueda, se da una condicin BOF y no se devuelve el registro al programa. Tambin se da una condicin BOF cuando se produce el inicio de archivo. La operacin READPE slo puede utilizarse con archivos AS/400. El factor 1, el argumento de bsqueda, es opcional e identifica el registro a recuperar. Puede ser un nombre de campo, un literal, una constante con nombre o una constante figurativa. Tambin puede especificar un nombre KLIST en el factor 1 para un archivo descrito externamente. Si el factor se deja en blanco y la clave completa del registro anterior es igual a la del registro actual, se recupera el anterior registro del archivo. La clave completa se define mediante el formato de registro o el archivo utilizado en el factor 2. Las claves de tipo grfico y UCS-2 deben tener el mismo CCSID. El factor 2 debe contener el nombre del archivo o formato del registro a recuperar. Slo se permite un nombre de formato de registro en el factor 2 con un archivo descrito externamente (identificado por una E en la posicin 22 de las especificaciones de descripcin de archivo).
518
El campo de resultado puede contener el nombre de una estructura de datos a la que se traslada el registro ledo nicamente si el archivo nombrado en el factor 2 es un archivo descrito por programa (identificado por una F en la posicin 22 de las especificaciones de descripcin de archivo). Consulte el apartado Operaciones de archivos en la pgina 380 para obtener una descripcin de la forma en que se transfieren los datos entre el archivo y la estructura de datos. Si el archivo que se lee es un archivo de disco de actualizacin, puede especificar el ampliador de operacin N para indicar que no debe realizarse ningn bloqueo sobre el registro cuando se lea. Para manejar las excepciones de READPE (cdigos de estado de archivo mayores que 1000), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones/errores de archivo en la pgina 37. Puede especificar un indicador en las posiciones 75-76 que se activar si se da una condicin BOF (principio de archivo): es decir, si no se encuentra un registro con una clave igual al argumento de bsqueda o si se encuentra un inicio de archivo. Esta informacin puede obtenerse tambin a partir de la funcin incorporada %EOF, que devuelve 1 si se produce una condicin BOF y 0 en caso contrario. Si una operacin READPE no es satisfactoria, debe volver a posicionar el archivo: por ejemplo, utilizando una operacin CHAIN, SETGT o SETLL. Nota: Si el archivo que se lee est definido como actualizacin, se solicita un bloqueo temporal en el registro anterior y el argumento de bsqueda se compara con la clave de ese registro. Si el registro ya est bloqueado, el programa debe esperar hasta que el registro est disponible antes de obtener el bloqueo temporal y realizar la comparacin. Si la comparacin es desigual, se da una condicin BOF y se elimina el bloqueo temporal del registro. Si no se especifica ningn bloqueo (ampliador de operacin N), no se solicita un bloqueo temporal. Si una operacin READPE con el factor 1 especificado est situada inmediatamente despus de una operacin OPEN o una condicin BOF, se devuelve BOF. Una operacin READPE sin un factor 1 especificado situada inmediatamente despus de una operacin OPEN o una condicin BOF da como resultado una condicin de error. Se activa el indicador de error de las posiciones 73 y 74, si se ha especificado, o se activa el ampliador E seleccionado con %ERROR, si se ha especificado. El archivo debe volverse a posicionar utilizando CHAIN, SETLL, READ, READE o READP con el factor 1 especificado antes de emitir una operacin READPE con el factor 1 en blanco. No debe utilizarse una operacin SETGT para situar el archivo antes de emitir una operacin READPE (sin el factor 1 especificado) porque esto da como resultado una condicin de registro no encontrado (ya que el registro anterior al registro actual no tiene nunca la misma clave que el registro actual despus de emitir SETGT). Si el factor 1 est especificado con la misma clave para los dos cdigos de operacin, no se producir esta condicin de error.
519
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* Con el factor 1 especificado... C* C* Se lee el registro anterior y se compara la clave con FieldA. C* Se activa el indicador 99 si la clave del registro no coincide con C* FieldA. C FieldA READPE FileA 99 C* C* Se lee el registro anterior del formato de registro RecA, y se C* compara la clave con FieldC. El indicador 88 se activa si la operacin C* no finaliza de forma satisfactoria, y el indicador 99 se activa C* si la clave del registro no coincide con FieldC. C FieldC READPE RecA 8899 C* C* Sin el factor 1 especificado... C* C* Se recupera el registro anterior de la va de acceso si su valor de C* clave es igual al valor de clave del registro actual. Se activa el C* indicador 99 si los valores de clave no son iguales. C READPE FileA 99 C* C* Se recupera el registro anterior del formato del registro RecA si C* su valor de clave coincide con el valor de clave del registro actual C* en la va de acceso. Se activa el indicador 88 si la operacin no es C* satisfactoria; se activa el 99 si los valores de clave no son iguales. C READPE RecA 8899
La operacin READS recupera los registros seleccionados de un componente de subarchivo. Se lee el primer registro seleccionado del componente de subarchivo. Si el estilo de seleccin de subarchivo es extendido o mltiple, se deselecciona el registro. Si el estilo de seleccin del subarchivo es uno solo, el registro permanece seleccionado. Una operacin READS posterior lee de nuevo el mismo registro. El factor 2 especifica el nombre del componente de subarchivo. Si el campo de resultado est especificado, debe ser numrico sin posiciones decimales. El nmero de ndice de subarchivo del registro recuperado se coloca en el campo del resultado. Para manejar las excepciones de READS (cdigos de estado de archivo mayores que 1000), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones/errores de archivo en la pgina 37.
520
Puede especificar un indicador en las posiciones 75-76 que se activar cuando se d una condicin EOF: es decir, cuando no haya registros seleccionados en el subarchivo. Esta informacin puede obtenerse tambin a partir de la funcin incorporada %EOF, que devuelve 1 si se produce una condicin EOF y 0 en caso contrario.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* SUBCUST es un componente subarchivo que muestra una lista de registros. C* La operacin READS lee los registros seleccionados en el subarchivo C* visualizado uno por uno en el bucle do while. SCUSNO y SCUSNAM C* son campos definidos en el subarchivo. C* C READS SUBCUST 27 C DOW *IN27 = *OFF C* C* Los campos SCUSNO, SCUSNAM pueden utilizarse aqu para procesar el C* registro seleccionado que se ha ledo. C* C READS SUBCUST 27 C ENDDO C*
La operacin REALLOC modifica la longitud del almacenamiento dinmico al que seala el puntero del campo del resultado, por la longitud especificada en el factor 2. El campo de resultado de REALLOC contiene una variable de puntero de base. El puntero del campo del resultado debe contener el valor establecido anteriormente mediante una operacin de asignacin de almacenamiento dinmico (puede ser una operacin ALLOC o REALLOC en RPG, o bien cualquier otra funcin de almacenamiento dinmico). No es suficiente sealar simplemente al almacenamiento dinmico; se ha de establecer que el puntero seale al principio de una asignacin. Se asigna un nuevo almacenamiento con el tamao especificado y el valor del antiguo almacenamiento se copia en el nuevo. Despus se desasigna el antiguo almacenamiento. Si la longitud nueva es menor, el valor se trunca por la derecha. Si la longitud nueva es mayor, el nuevo almacenamiento situado a la derecha de los datos copiados no est inicializado. Se establece el puntero del campo del resultado para que seale al nuevo almacenamiento. Si la operacin no es satisfactoria, se produce una condicin de error pero no se modificar el puntero del campo de resultado. Si el puntero original era vlido y la operacin no fue satisfactoria porque no se dispona de suficiente almacenamiento
Captulo 25. Cdigos de operacin
521
nuevo (estado 425), no se desasignar el almacenamiento original, de modo que el puntero del campo del resultado sigue siendo vlido con su valor original. Si el puntero es vlido pero no seala a un almacenamiento que puede desasignarse, se establecer el estado 00426 (error en la operacin de gestin de almacenamiento). Para manejar las excepciones con los cdigos de estado del programa 425 426, puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48. El factor 2 contiene una constante o variable numrica que indica el nuevo tamao del almacenamiento (en bytes) que ha de asignarse. El factor 2 debe ser numrico con cero posiciones decimales. El valor ha de estar comprendido entre 1 y 16776704.
D Ptr1 S * D Fld S 32767A BASED(Ptr1) D* C* La operacin ALLOC asigna 7 bytes al puntero Ptr1. C* Despus de la operacin ALLOC, slo pueden utilizarse los primeros C* bytes de la variable Fld. C ALLOC 7 Ptr1 C EVAL %SUBST(Fld : 1 : 7) = '1234567' C* C REALLOC 10 Ptr1 C* Ahora pueden utilizarse 10 bytes de Fld. C EVAL %SUBST(Fld : 1 : 10) = '123456789A'
Si desea obtener ms informacin, consulte la seccin Operaciones de gestin de memoria en la pgina 382.
RESET (Restablecer)
Cdigo RESET (E) RESET (E) RESET (E) *NOKEY Factor 1 Factor 2 *ALL *ALL Campo de resultado Variable Estructura Ventana o Subarchivo Indicadores _ _ _ ER ER ER _ _ _
La operacin RESET establece los siguientes elementos en sus valores iniciales: v Elementos de una estructura (formatos de registro, estructuras de datos, matrices, tablas) v Variables (campos, subcampos, indicadores) v Componentes de texto esttico y de campos de entrada de una ventana Para manejar las excepciones de RESET (cdigo de estado del programa 123), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48. La operacin RESET aumenta la cantidad de almacenamiento que necesita el programa ya que las variables, estructuras o ventanas que se restablecen doblan el
522
almacenamiento. En estructuras de datos de mltiples apariciones, tablas y matrices, se guarda el valor inicial de cada aparicin o elemento. No utilice la operacin RESET durante la rutina de inicializacin. Si se utiliza una operacin (por ejemplo, GOTO) para abandonar la subrutina de inicializacin con anterioridad a la posicin donde se guardan los valores iniciales, se produce un error en todas las operaciones RESET que se intentan en el programa.
Nota: Despus de la operacin RESET, los valores almacenados en los campos del programa coinciden con los valores visualizados en la pantalla.
523
El campo del resultado debe contener un nombre de formato de registro, un nombre de estructura de datos, un nombre de matriz, un nombre de tabla, un nombre de campo, un subcampo, un elemento de matriz o un nombre de indicador: v Si se restablece un formato de registro o una estructura de datos de nica aparicin, todos los campos se restablecen en el orden en que se han declarado en la estructura. Si se especifica el factor 1, debe contener *NOKEY que indica que los campos de clave no se restablecen en sus valores iniciales. Si se especifica el factor 2, debe contener *ALL que indica que se restablecen todos los campos para el formato de registro. Si no se especifica el factor 2, slo afecta a los campos de salida del formato de registro. Afecta a todos los indicadores de condicionamiento de campo del formato de registro. RESET no afecta a los campos de slo entrada. v Si se restablece una estructura de datos de mltiples apariciones, se restablecen todos los campos de la aparicin actual. v Si se restablece una matriz, se restablece toda la matriz. v Si se restablece una tabla, se restablece el elemento actual de tabla. v Si se restablece un elemento de matriz (incluyendo indicadores), slo se restablece el elemento especificado. Nota: No se permite RESET con variables basadas.
524
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... FEXTFILE O E DISK REMOTE DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D D* El archivo EXTFILE contiene un formato de registro, RECFMT, que D* contiene los campos de caracteres CHAR1 y CHAR2 y los campos D* numricos NUM1 y NUM2. D D DS1 DS D DAY1 1 8 INZ('MONDAY') D DAY2 9 16 INZ('THURSDAY') D JDATE 17 22 D CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* La operacin siguiente establece DAY1, DAY2 y JDATE como blancos. C C CLEAR DS1 C C* La operacin siguiente establece DAY1, DAY2 y JDATE con sus valores C* iniciales 'MONDAY', 'THURSDAY' y UDATE respectivamente. C* El valor inicial de UDATE para JDATE se establece en *INZSR. C C RESET DS1 C C* La operacin siguiente establece CHAR1 y CHAR2 como blancos y C* NUM1 y NUM2 en cero. C CLEAR RECFMT C* La operacin siguiente establece CHAR1, CHAR2, NUM1 y C* NUM2 en sus valores iniciales 'NAME', 'ADDRESS', 1 y 2 C* respectivamente. Dichos valores se establecen en *INZSR. C* C RESET RECFMT C C *INZSR BEGSR C MOVEL UDATE JDATE C MOVEL 'NAME ' CHAR1 C MOVEL 'ADDRESS ' CHAR2 C Z-ADD 1 NUM1 C Z-ADD 2 NUM2 C ENDSR C* La operacin siguiente establece todos los campos del formato de C* registro como espacios en blanco, excepto los campos clave. C* C *NOKEY RESET *ALL DBRECFMT
La operacin RETURN provoca una vuelta al llamador: v Si LR est activado, el programa finaliza normalmente y el componente termina. Se lleva a cabo *TERMSR. Se graban las estructuras de rea de datos, matrices y tablas bloqueadas. Se restablecen los indicadores externos. Si se ha invocado ms de una subrutina, RETURN provoca una vuelta a la invocacin de la subrutina de accin anterior.
525
v Si LR no est activado, se lleva a cabo el proceso por omisin asociado con el evento actual, a menos que RETURN est en una subrutina anidada, o se est efectuando la inicializacin o terminacin. Nota: LR no produce ningn efecto hasta que se retorna la ltima invocacin de subrutina de accin. Cuando un subprocedimiento vuelve, el valor de retorno, si est especificado en el prototipo del programa o procedimiento llamado, se pasa al llamador. No se produce nada ms automticamente. Se han de cerrar manualmente todos los archivos y reas de datos. Se pueden activar los indicadores, pero esto no provocar que se produzca la finalizacin del programa. Para obtener informacin acerca de cmo utilizar los ampliadores de operacin H, M y R, consulte la seccin Reglas de precisin para operaciones numricas en la pgina 358. En un subprocedimiento que devuelve un valor, se ha de codificar una operacin RETURN dentro del subprocedimiento. El valor devuelto real desempea la misma funcin que el lado izquierdo de la expresin EVAL, mientras que el factor 2 ampliado de la operacin RETURN desempea la misma funcin que el lado derecho. Puede devolverse una matriz slo si el prototipo ha definido el valor de retorno como una matriz. En un subprocedimiento que devuelve un valor hay que asegurarse de que se efecta la operacin RETURN antes de llegar al final del procedimiento. Si el subprocedimiento finaliza sin encontrar una operacin RETURN, se indica una excepcin al llamador.
ROLBK (Retrotraer)
Cdigo ROLBK (E) Factor 1 Factor 2 Campo de resultado Indicadores _ ER _
La operacin ROLBK elimina todos los cambios realizados en cualquier archivo de base de datos de AS/400 que se haya abierto para control de compromiso desde la ltima operacin de comprometer o retrotraer o desde el principio de las operaciones bajo el control de compromiso si no ha habido ninguna operacin COMMIT ni ROLBK. La operacin ROLBK slo puede utilizarse con archivos AS/400. No se puede utilizar con archivos locales. Se liberan todos los bloqueos de registro para los archivos bajo control de compromiso para un servidor AS/400 determinado sin tener en cuenta qu componente ha emitido la operacin ROLBK. Nota: El componente que emite ROLBK no necesita tener ningn archivo bajo control de compromiso. Para manejar las excepciones de ROLBK (cdigos de estado de programa 802 a 805), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48.
526
La operacin SCAN busca una serie de comparacin en una serie base. La operacin SCAN empieza en el carcter situado ms a la izquierda de la serie base del factor 2 (tal como se especifica en la ubicacin de inicio) y contina, carcter por carcter, de izquierda a derecha, comparando los caracteres del factor 2 con los del factor 1. Las series se indexan desde la posicin 1. Notas: 1. La serie de comparacin y la serie base deben ser del mismo tipo, ambas de tipo carcter, ambas de tipo grfico o ambas de tipo UCS-2. 2. Los blancos de inicio, de cola o intercalados especificados en la serie de comparacin se incluyen en la operacin SCAN. 3. La operacin SCAN es sensible a maysculas y minsculas. Una serie de comparacin especificada en minsculas no se encontrar en una serie base especificada en maysculas. 4. No se pueden utilizar constantes figurativas en el factor 1, en el factor 2 ni en los campos de resultado. 5. No se permite solapado en una estructura de datos para el factor 1 y el campo del resultado o para el factor 2 y el campo del resultado. El factor 1 debe contener la serie de comparacin o sta, seguida de dos puntos, seguidos a su vez por la longitud. La serie de comparacin debe contener un nombre de campo, un elemento de matriz, una constante con nombre, una nombre de estructura de datos, un literal o un nombre de tabla. La longitud debe ser numrica sin posiciones decimales y debe contener una constante con nombre, un elemento de matriz, un nombre de campo, un literal o un nombre de tabla. Si no se especifica la longitud, se utiliza la serie de comparacin. El factor 2 debe contener la serie base, o la serie base seguida de dos puntos y, a continuacin, la ubicacin de inicio. La serie base debe contener un nombre de campo, un elemento de matriz, una constante con nombre, un nombre de estructura de datos, un literal o un nombre de tabla. La ubicacin de inicio tiene que ser numrica sin posiciones decimales y debe ser una constante con nombre, un elemento de matriz, un nombre de campo, un literal o un nombre de tabla. Si no se especifica la ubicacin de inicio, el valor por omisin es 1. Nota: El inicio no puede ser mayor que la longitud. Si se utilizan series de tipo grfico o UCS-2, la posicin de inicio y la longitud se miden en bytes dobles. Si la posicin de inicio es mayor que 1, el campo del resultado contiene la posicin de la serie del comparador relativa al inicio de la serie origen, no relativa a la posicin de inicio. El campo del resultado contiene el valor de la posicin situada ms a la izquierda de la serie de comparacin en la serie base, si se encuentra. Debe ser numrico sin posiciones decimales y ha de contener un nombre de campo, un elemento de matriz, un nombre de matriz o un nombre de tabla. Si no se especifica el campo
Captulo 25. Cdigos de operacin
527
del resultado, debe especificarse un indicador de resultado en las posiciones 75 y 76. El campo del resultado toma el valor 0 si no se encuentra la serie. Si el campo del resultado contiene una matriz, cada aparicin de la serie del comparador se sita en la matriz con la aparicin situada ms a la izquierda en el elemento 1. Los elementos de la matriz que siguen al elemento que contiene la aparicin situada ms a la derecha, contienen ceros. La matriz del resultado debe ser tan grande como la longitud del campo de la serie base especificada en el factor 2. Si el campo del resultado es una matriz numrica, se registran tantas apariciones como elementos haya en la matriz. Si no se encuentran apariciones, el campo del resultado se establece en cero Para manejar las excepciones de SCAN (cdigo de estado de programa 100), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Se produce un error si la posicin inicial es mayor que la longitud del factor 2 o si el valor del factor 1 es demasiado grande. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48. Puede especificar un indicador en las posiciones 75-76 que se active si se encuentra la serie que se est buscando. Tambin puede obtener esta informacin a partir de la funcin incorporada %FOUND que devuelve 1 si se encuentra una coincidencia.
528
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* La operacin SCAN busca la subserie 'ABC' empezando en la C* posicin 3 del factor 2; en el campo de resultado se sita un 3. C* El indicador 90 se activa porque se encuentra la serie. Al no C* especificarse la posicin inicial, se utiliza el valor por omisin 1. C 'ABC' SCAN 'XCABCD' RESULT 90 C* C* Esta operacin SCAN busca en la serie del factor 2 una aparicin C* de la serie del factor 1, empezando en la posicin 3. C* La 'Y' en la posicin 1 de la serie base se ignora, ya que la C* operacin de bsqueda se inicia en la posicin 3. La operacin C* sita los valores 5 y 6 en el primer y segundo elemento de la C* matriz. El indicador 90 se activa. C C MOVE 'YARRYY' FIELD1 6 C MOVE 'Y' FIELD2 1 C FIELD2 SCAN FIELD1:3 ARRAY 90 C C* Esta operacin SCAN busca en la serie del factor 2 una aparicin, C* empezando en la posicin 2, de la serie del factor 1 C* con una longitud de 4. Al no encontrarse 'TOOL' en FIELD1, INT se C* establece en cero y el indicador 90 se desactiva. C C MOVE 'TESTING' FIELD1 7 C Z-ADD 2 X 1 0 C MOVEL 'TOOL' FIELD2 5 C FIELD2:4 SCAN FIELD1:X INT90 20 90 C C* C* Esta operacin SCAN est buscando un nombre. Cuando el nombre C* se encuentra, %FOUND devuelve '1' de forma que se llama a HandleLine. C* C SrchName SCAN Line C IF %FOUND C EXSR HandleLine C ENDIF
529
El grupo de seleccin procesa de forma condicional una entre diversas secuencias u operaciones alternativas. Consiste en: v Una sentencia SELECT v Cero o ms grupos WHENxx o WHEN v Un grupo OTHER opcional v Una sentencia ENDSL o END. Tras la operacin SELECT, el control pasa a la sentencia que sigue a la primera condicin WHENxx que se satisfaga. A continuacin se ejecutan todas las sentencias hasta la siguiente operacin WHENxx. El control pasa a la sentencia ENDSL (slo se ejecuta un WHENxx). Si no se cumple ninguna condicin WHENxx y se especifica una operacin OTHER, el control pasa a la sentencia siguiente a la operacin OTHER. Si no se cumple ninguna condicin WHENxx y no se ha especificado ninguna operacin OTHER, el control se transfiere a la sentencia siguiente a la operacin ENDSL del grupo de seleccin. Los indicadores de condicionamiento pueden utilizarse en la operacin SELECT. Si no se satisfacen, el control pasa de forma inmediata a la sentencia siguiente a la operacin ENDSL del grupo de seleccin. Los indicadores de condicionamiento no pueden utilizarse individualmente en las operaciones WHENxx, WHEN, OTHER y ENDSL. El grupo de seleccin puede anidarse dentro de grupos de seleccin IF, DO u otros. Los grupos IF y DO pueden anidarse dentro de grupos de seleccin. Si se especifica una operacin SELECT dentro de un grupo de seleccin, las operaciones WHENxx y OTHER se aplican al nuevo grupo de seleccin hasta que se especifique un grupo ENDSL.
530
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* En el ejemplo siguiente, si X es igual a 1, se realizan las C* operaciones en la secuencia 1 (fjese en que no se necesita operacin C* END antes del siguiente WHENxx); si X NO es igual a 1, y si C* Y=2 y X<10, se realizan la operaciones en la secuencia 2. Si no C* se cumple ninguna condicin, se realizan las operaciones de la C* secuencia 3. C* C SELECT C WHEN X = 1 C Z-ADD A B C MOVE C D C* Secuencia 1 C : C WHEN ((Y = 2) AND (X < 10)) C* Secuencia 2 C : C OTHER C* Secuencia 3 C : C ENDSL C* C* El ejemplo siguiente muestra un grupo de seleccin con indicadores C* de condicin. Tras la operacin CHAIN, si el indicador 10 est C* activado, el control pasa a la operacin ADD. Si el indicador 10 C* est desactivado, se procesa el grupo de seleccin. C* C KEY CHAIN FILE 10 C N10 SELECT C WHEN X = 1 C* Secuencia 1 C : C WHEN Y = 2 C* Secuencia 2 C : C ENDSL C ADD 1 N
La operacin SETATR establece el atributo de un componente. El atributo de un componente slo puede establecerse si se ha creado dicho componente. Notas: 1. Las operaciones SETATR pueden utilizarse para subrutinas de accin de mltiples enlaces. Para una descripcin de las subrutinas de accin de mltiples enlaces, consulte BEGACT (Empezar subrutina de accin) en la pgina 397. Para establecer un atributo para un componente de una ventana que no sea la ventana padre, utilice la funcin incorporada %SETATR. Para una descripcin de la funcin incorporada %SETATR, consulte %SETATR (Establecer atributo) en la pgina 337.
Captulo 25. Cdigos de operacin
531
2. La operacin SETATR no soporta valores enteros con signo y sin signo de 1 y 8 bytes, ni valores Unicode. Si se especifica el factor 1, debe contener el nombre del componente o un campo que contenga el nombre de un componente cuyo atributo se est estableciendo. El factor 2 debe contener el nuevo valor para el atributo. Debe ser un literal, una constante con nombre, una constante figurativa o un campo que contenga el nuevo valor para el atributo. El campo del resultado debe contener el nombre del atributo o un campo que contenga el nombre del atributo. Para manejar las excepciones de SETATR (cdigos de estado de programa 1400, 1402-1404), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48. Si est especificado un indicador resultante, ste se activar cuando la operacin SETATR no se complete satisfactoriamente. Nota: La funcin incorporada %SETATR no afecta a los campos del programa correspondientes a los componentes. Para asegurar que el valor de atributo y el valor del campo del programa sean iguales, utilice el campo del programa para definir el valor del atributo. Esto se aplica a los atributos que tienen campos de programa correlacionados, como los campos de entrada con el atributo TEXT.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq... C Extended-factor2++++++++++++++++++++++++++++ C* C* Cambiar la etiqueta en un botn denominado BUTTON1. C* C 'BUTTON1' SETATR Cancel 'LABEL'
La operacin SETGT sita un archivo en el siguiente registro con una clave o nmero relativo de registro mayor que el argumento de bsqueda. El archivo debe ser un archivo controlado en clculo (identificado con una F en la posicin 18 de las especificaciones de descripcin de archivo). La operacin SETGT slo puede utilizarse con archivos AS/400.
532
Si el archivo se accede por clave, el factor 1 puede ser un nombre de campo, una constante con nombre, una constante figurativa o un literal. Si el archivo se accede por clave y es un archivo descrito externamente, se puede especificar un nombre de KLIST en el factor 1. Si se accede al archivo por nmero de registro relativo, el factor 1 debe ser un literal entero, constante con nombre o campo. Las claves de tipo grfico y UCS-2 deben tener el mismo CCSID. El factor 2 debe ser un nombre de archivo o un nombre de formato de registro. Un nombre de formato de registro en el factor 2 slo se permite con un archivo descrito externamente. Si se especifica MBR(*ALL), SETGT slo procesa el primer miembro de archivo abierto. Puede especificar un indicador en las posiciones 71-72 que se active si no se encuentra ningn registro con una clave o nmero relativo de registro mayor que el argumento de bsqueda especificado en el factor 1. Esta informacin puede obtenerse tambin a partir de la funcin incorporada %FOUND, que devuelve 0 si no se encuentra ningn registro y 1 si se encuentra alguno. Para manejar las excepciones de SETGT (cdigos de estado de archivo mayores que 1000), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones/errores de archivo en la pgina 37. Si la operacin SETGT no es satisfactoria (ningn registro cumple la condicin), el archivo se posiciona al final del archivo. Cuando se lleva a cabo la operacin SETGT, el archivo se sita en la posicin inmediatamente anterior al primer registro cuya clave o nmero relativo de registro sea mayor que el argumento de bsqueda especificado en el factor 1. Este registro se puede recuperar leyendo el archivo. Puede utilizarse *START y *END para posicionar el archivo. Si especifica *START o *END en el factor 1, observe lo siguiente: v El factor 2 debe contener un nombre de archivo. v No puede utilizar *HIVAL ni *LOVAL en el factor 1. v No puede especificar el indicador NR. Para obtener ms informacin, consulte la seccin Posicin de archivo en la pgina 6. Consulte la seccin Soporte de valores nulos de base de datos en la pgina 128, si desea obtener informacin acerca de cmo leer registros con campos con posibilidad de nulos.
533
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* Este ejemplo muestra cmo situar el archivo de modo que READ C* lea el registro siguiente. El argumento de bsqueda, KEY, especificado C* para la operacin SETGT tiene el valor 98; por lo tanto, SETGT sita C* el archivo antes del primer registro de formato de archivo FILEA que C* tiene un valor de campo de clave mayor que 98. El archivo se posiciona C* antes del primer registro con un valor de clave de 100. La operacin C* READ lee el registro que tiene un valor de 100 en su campo de C* clave. C C KEY SETGT FILEA C READ FILEA 64 C* C* Este ejemplo muestra cmo leer el ltimo registro de un grupo de C* registros con el mismo valor de clave y formato de un archivo descrito C* por programa. El argumento de bsqueda, KEY, especificado por la C* operacin SETGT posiciona el archivo antes del primer registro de C* archivo FILEB que tiene un valor de campo de clave mayor que 70. C* El archivo se posiciona antes del primer registro con un valor de C* clave de 80. La operacin READP lee el ltimo registro que tiene un C* valor de 70 en su campo de clave. C C KEY SETGT FILEB C READP FILEB 64
Valores del campo de claves 97 97 97 97 FILEA 98 (SETGT) (READ) 100 100 100 101 101 (READ) (SETGT)
534
La operacin SETLL sita un archivo en el siguiente registro que tenga una clave o un nmero relativo de registro mayor o igual al argumento de bsqueda. El archivo debe ser un archivo controlado en clculo (identificado con una F en la posicin 18 de las especificaciones de descripcin de archivo). La operacin SETLL slo puede utilizarse con archivos AS/400. No se puede utilizar con archivos locales. El factor 1 es obligatorio. Si el archivo se accede por clave, el factor 1 puede ser un nombre de archivo, una constante con nombre, una constante figurativa o un literal que se utiliza como el argumento de bsqueda para el posicionamiento del archivo. Tambin puede especificar un nombre KLIST en el factor 1 para un archivo descrito externamente. Si se accede al archivo a travs de un nmero de registro relativo, el factor 1 debe contener un literal entero, una constante con nombre o un campo numrico sin posiciones decimales. Las claves de tipo grfico y UCS-2 deben tener el mismo CCSID. El factor 2 debe contener un nombre de archivo o un nombre de formato de registro. Un nombre de formato de registro en el factor 2 slo se permite con un archivo descrito externamente. Si se especifica MBR(*ALL), SETLL slo procesa el primer miembro de archivo abierto. Los indicadores resultantes reflejan el estado de la operacin. Puede especificar un indicador en las posiciones 71-72 que se active cuando el argumento de bsqueda sea mayor que la clave o nmero relativo ms alto del archivo. Esta informacin tambin puede obtenerse de la funcin incorporada %FOUND, que devuelve 0 si no se ha encontrado ningn registro y 1 si se ha encontrado alguno. Para manejar las excepciones de SETLL (cdigos de estado de archivo mayores que 1000), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones/errores de archivo en la pgina 37. Puede especificar un indicador en las posiciones 75-76 que se active cuando se encuentre un registro cuya clave o nmero relativo sea igual al argumento de bsqueda. Tambin puede obtener esta informacin a partir de la funcin incorporada %EQUAL que devuelve 1 si se encuentra una coincidencia. Si el factor 2 contiene un nombre de archivo para el que se ha de establecer el lmite inferior, el archivo se sita en el primer registro con una clave o nmero relativo de registro igual o mayor que el argumento de bsqueda. Si el factor 2 contiene un nombre de formato de registro para el que se ha de establecer el lmite inferior, el archivo se sita en el primer registro del tipo especificado que tenga una clave igual o mayor que el argumento de bsqueda. Al alcanzar el final del archivo en un archivo procesado por SETLL, puede emitirse otro SETLL para volver a situar el archivo. Despus de que una operacin SETLL site satisfactoriamente el archivo en un registro, ste se puede recuperar leyndolo. Puede utilizarse *START y *END para posicionar el archivo. Si especifica *START o *END en el factor 1, observe lo siguiente: v El factor 2 debe contener un nombre de archivo. v No puede utilizar *HIVAL ni *LOVAL en el factor 1. v No puede especificar los indicadores NR y EQ. v Debe especificarse un indicador de error (posiciones 73-74) o el ampliador E.
535
Para obtener ms informacin sobre la utilizacin de *START y *END, consulte Posicin de archivo en la pgina 6. Antes de que la aplicacin lea este archivo, otra aplicacin puede suprimir registros del archivo. Puede que no recupere el registro que esperaba. Incluso si la funcin incorporada %EQUAL tambin est activada o el indicador de resultado de las posiciones 75 y 76 est activado indicando que se ha encontrado una coincidencia de registro, es posible que no obtenga dicho registro. SETLL no accede a registros de datos. Para verificar si existe una clave, utilice SETLL con un indicador de igualdad (posiciones 75 y 76) o la funcin incorporada %EQUAL en lugar de la operacin CHAIN. En los casos en que el archivo sea un archivo lgico de formato mltiple con escasas claves, la operacin CHAIN puede ser una solucin ms rpida que SETLL. Consulte la seccin Soporte de valores nulos de base de datos en la pgina 128, si desea obtener informacin acerca de cmo leer registros con campos con posibilidad de nulos. En el ejemplo siguiente, el archivo ORDFIL contiene registros de pedidos. El campo de clave es el campo de nmero de pedido (ORDER). Existen mltiples registros para cada pedido. ORDFIL tiene el aspecto siguiente en las especificaciones de clculo:
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* La totalidad de los 101 registros de ORDFIL se imprimirn. C* El valor 101 ha sido previamente situado en ORDER. La operacin C* SETLL sita el archivo en el primer registro con el C* valor de clave 101. C* %EQUAL devolver '1'. C C ORDER SETLL ORDFIL C C* El bucle DO siguiente procesa todos los registros que tienen C* el mismo valor de clave. C* C IF %EQUAL C DOU %EOF C ORDER READE ORDFIL C IF NOT %EOF C EXCEPT DETAIL C ENDIF C ENDDO C ENDIF C C* C* La operacin READE lee los registros 101 segundo, tercero y cuarto C* igual que se ley el registro 101 primero. Tras haber ledo C* el registro 101 cuarto, se intenta la operacin READE. C* Al no pertenecer el registro 102 al mismo grupo, %EOF devolver C* '1', se ignora la operacin EXCEPT y finaliza el C* bucle DOU.
536
ORDFIL ORDEN 100 100 100 (SETLL) 101 101 101 101 102 Registro 1 de 101 Registro 2 de 101 Registro 3 de 101 Registro 4 de 101 Registro 1 de 102 Otros campos Registro 1 de 100 Registro 2 de 100 Registro 3 de 100
La operacin SETOFF desactiva todos los indicadores especificados en las posiciones 71 a 76. Debe especificar como mnimo un indicador resultante en las posiciones 71 a 76. La Figura 278 en la pgina 538 ilustra la operacin SETOFF.
La operacin SETON activa todos los indicadores especificados en las posiciones 71 a 76. Debe especificar como mnimo un indicador resultante en las posiciones 71 a 76.
537
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* Las operaciones SETON y SETOFF activan y desactivan de uno a tres C* indicadores especificados en las posiciones 71 a 76. C* La operacin SETON activa el indicador 17. C C SETON 17 C C* La operacin SETON activa los indicadores 17 y 18. C C SETON 1718 C C* La operacin SETOFF desactiva el indicador 21. C C SETOFF 21
La operacin SHOWWIN carga una ventana en la memoria. El atributo Visible controla si se visualiza la ventana. Nota: No pueden establecerse ni pueden hacerse referencia a los atributos para una ventana antes de una operacin SHOWWIN. Tampoco puede hacerse referencia a los componentes de una ventana antes de una operacin SHOWWIN. El factor 2 contiene el nombre de la ventana que se ha de visualizar. Para manejar las excepciones de SHOWWIN (cdigos de estado de programa 1400 a 1420), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48. No utilice SHOWWIN y el atributo Abrir Inmediatamente. Si lo hace, el indicador de resultado se activa. Esto significa que la ventana ya est cargada. Si este indicador est activado, se puede establecer el atributo Visible para la ventana. Utilice la operacin SHOWWIN para visualizar ventanas que no se visualicen con frecuencia en lugar de establecer Abrir Inmediatamente para la ventana. Para las ventanas principales (la primera ventana que visualiza una aplicacin), utilice el valor Abrir Inmediatamente para la ventana en lugar de SHOWWIN.
538
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq... C Extended-factor2++++++++++++++++++++++++++++ C* C* Se muestra una ventana denominada UPDCUST. C SHOWWIN 'UPDCUST'
La operacin SORTA clasifica la matriz especificada en el factor 2 en orden ascendente o descendente. Esta secuencia se indica en la especificacin de definicin. Si no se especifica la secuencia, la matriz se clasifica en orden ascendente. EL factor 2 contiene el nombre de la matriz a clasificar. No se puede especificar *IN en el factor 2. Si la matriz est definida como una matriz en tiempo de compilacin o en tiempo de pre-ejecucin con los datos en un formato alternativo, la matriz alternativa no se clasifica. Si la matriz est definida con la palabra clave OVERLAY(nombre{:pos}), la matriz base se clasificar con la secuencia que define la matriz OVERLAY. Las matrices grficas se clasifican por los valores hexadecimales de los elementos de matriz, en el orden especificado en la especificacin de definicin. Clasificar una matriz no guarda el orden anterior. Por ejemplo, si se clasifica una matriz dos veces, utilizando diferentes matrices de recubrimiento, la secuencia final ser la de la ltima clasificacin. Los elementos que son iguales en la secuencia de ordenacin pero que tienen distintos valores hexadecimales (por ejemplo, debido a la utilizacin de una matriz de recubrimiento para determinar la secuencia), pueden no estar en el mismo orden despus de la clasificacin, comparando con el orden en que estaban antes. Cuando clasifique matrices de punteros de base, debe asegurarse de que todos los valores de las matrices sean direcciones dentro del mismo espacio. De lo contrario, pueden producirse resultados incoherentes. Consulte la seccin Operaciones de comparacin en la pgina 375, para obtener ms informacin. Si se clasifica una matriz con posibilidad de nulos, la clasificacin no tomar en consideracin los valores de los distintivos de nulo. La clasificacin de una matriz asignada dinmicamente sin todos los elementos definidos asignados puede producir errores.
539
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ DARRY S 1A DIM(8) ASCEND D CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* La operacin SORTA clasifica ARRY en secuencia ascendente ya que C* se especifica la palabra clave ASCEND. C* Si el contenido de ARRY sin clasificar era GT1BA2L0, el C* el contenido de ARRY clasificada sera 012ABGLT. C* Observe que se utiliza la secuencia de clasificacin ASCII. C C SORTA ARRY
La operacin SQRT halla la raz cuadrada del campo indicado en el factor 2. La raz cuadrada del factor 2 se sita en el campo de resultado. El factor 2 debe ser numrico y puede contener una matriz, un elemento de matriz, un campo, una constante figurativa, un literal, una constante con nombre, un subcampo o un nombre de tabla. Si el valor del campo del factor 2 es cero, el valor del campo del resultado tambin es cero. Si el valor del campo del factor 2 es negativo, la rutina de manejo de excepciones/errores de VRPG Client recibe el control. El campo del resultado debe ser numrico y puede contener una matriz, un elemento de matriz, un subcampo o un elemento de tabla. Puede utilizarse una matriz entera en la operacin SQRT si el factor 2 y el campo del resultado contienen nombres de matrices. El nmero de posiciones decimales del campo del resultado puede ser menor o mayor que el nmero de posiciones decimales del factor 2. Sin embargo, el campo del resultado no debe tener menos de la mitad del nmero de posiciones decimales del factor 2.
540
En el apartado Operaciones aritmticas en la pgina 367 se describen las normas generales para la especificacin de operaciones aritmticas. La figura Figura 162 en la pgina 368 muestra ejemplos de la operacin SQRT.
La operacin START puede utilizarse para iniciar un nuevo componente en la aplicacin o para llamar a un programa local. Para cada operacin START que inicie un nuevo componente puede haber una operacin STOP. Para manejar las excepciones de START (cdigo de estado de programa 1410), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48.
541
La operacin STOP detiene uno o ms componentes de una aplicacin. Primero se termina cualquier componente hijo que el componente que se termina haya iniciado. Cuando un componente lgico termina: 1. Los componentes que ha iniciado el componente que se termina o los descendientes del componente se terminan por orden jerrquico inverso. 2. Se llama a la subrutina *TERMSR para cada componente que se termina que tenga *TERMSR definida. 3. Los cdigos *STATUS se colocan en la PSDS. Si se especifica el factor 2, debe contener un literal de caracteres que sea el nombre del componente o una variable que contenga el nombre del componente. Si no se especifica el factor 2 o si contiene el mismo nombre de componente que el que se est ejecutando actualmente (el componente que contiene la operacin STOP), se termina dicho componente. Cuando se lleva a cabo una operacin STOP que afecta a un componente que se est ejecutando actualmente, no se ejecutan las operaciones que siguen a STOP. Por ejemplo, COMPA inicia COMPB. Si COMPB es el componente que se est
542
ejecutando actualmente y si COMPB emite una operacin STOP para COMPA, COMPB terminar primero y despus terminar COMPA. No se realiza ninguna operacin posterior a STOP. Para manejar las excepciones de STOP puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq... C Extended-factor2++++++++++++++++++++++++++++ C* C STOP 'COMPX'
SUB (Restar)
Cdigo SUB (H) Factor 1 Minuendo Factor 2 Sustraendo Campo de resultado Diferencia Indicadores + Z
Si se especifica el factor 1, el factor 2 se resta del factor 1 y la diferencia se sita en el campo del resultado. Si no se especifica el factor 1, el factor 2 se sustrae del campo del resultado. El factor 1 y el factor 2 deben ser numricos y cada uno puede ser una matriz, un elemento de matriz, un campo, una constante figurativa, un literal, una constante con nombre, un subcampo o un nombre de tabla. El campo del resultado debe ser numrico y puede contener una matriz, un elemento de matriz, un subcampo o un nombre de tabla. En el apartado Operaciones aritmticas en la pgina 367 se describen las normas generales para la especificacin de operaciones aritmticas. La Figura 162 en la pgina 368 muestra ejemplos de la operacin SUB.
ER
La operacin SUBDUR puede utilizarse para lo siguiente: v Restar una duracin para establecer una fecha, hora o indicacin de la hora nuevas v Clculo de una duracin
543
La parte de mes resultante ha disminuido en 1; la parte de da resultante se ha ajustado porque el mes de abril slo tiene 30 das. Se producen resultados parecidos cuando se resta la duracin de un ao. Por ejemplo, si restamos un ao de 92/02/29 obtenemos 91/02/28, ajustando el valor porque el ao resultante no es bisiesto.
544
Para manejar las excepciones con los cdigos de estado de programa 103, 112 113, puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48.
545
CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... * C* Determina una LOANDATE (fecha prstamo) que es xx aos, yy meses, zz das C* anterior a DUEDATE (fecha de vencimiento). * C DUEDATE SUBDUR XX:*YEARS LOANDATE C SUBDUR YY:*MONTHS LOANDATE C SUBDUR ZZ:*DAYS LOANDATE * C* Suma 30 das a la fecha de vencimiento de prstamo C* C SUBDUR -30:*D LOANDUE * C* Calcula el nmero de das entre una LOANDATE y una DUEDATE. * C LOANDATE SUBDUR DUEDATE NUM_DAYS:*D 5 0 * C* Determina el nmero de segundos entre LOANDATE y DUEDATE. * C LOANDATE SUBDUR DUEDATE NUM_SECS:*S 5 0
SUBST (Subserie)
Cdigo SUBST (E P) Factor 1 Longitud a extraer Factor 2 Serie base:inicio Campo de resultado Serie de destino Indicadores _ ER _
La operacin SUBST devuelve una subserie que empieza en la ubicacin especificada en el factor 2 con la longitud especificada en el factor 1. Esta subserie se sita en el campo del resultado. Si no se especifica el factor 1, se utiliza la longitud de la serie desde su posicin de inicio. En las series de tipo grfico o UCS-2, la posicin inicial se mide en bytes dobles. La serie base y la serie destino deben ser del mismo tipo, ambas de tipo carcter, ambas de tipo grfico o ambas de tipo UCS-2. Si se especifica el factor 1, debe contener la longitud de la serie que se ha de extraer. Debe ser numrico sin posiciones decimales y puede contener un nombre de campo, un elemento de matriz, un nombre de tabla, un literal o una constante con nombre. Si no se especifica la longitud, se devuelve el resto de la serie base (empezando por la ubicacin de inicio). El factor 2 debe contener la serie base o la serie base seguida de dos puntos y, a continuacin, la posicin de inicio. La serie base debe contener un nombre de campo, un elemento de matriz, una constante con nombre, un nombre de estructura de datos, un nombre de tabla o un literal. La posicin de inicio debe ser numrica con cero posiciones decimales y puede contener un nombre de campo, un elemento de matriz, un nombre de tabla, un literal o una constante con nombre. Si no se especifica la posicin de inicio SUBST empieza en la posicin 1 de la serie base. En las series de tipo grfico o UCS-2, la posicin inicial se mide en bytes dobles. Nota: v La posicin de inicio y la longitud de la subserie a extraer deben ser enteros positivos
546
v La posicin de inicio no debe ser mayor que la longitud v La longitud no debe ser mayor que la longitud de la serie base de la ubicacin de inicio. El campo del resultado debe ser de tipo carcter, grfico o UCS-2 y puede contener un nombre de campo, un elemento de matriz, una estructura de datos o un nombre de tabla. El resultado se ajusta por la izquierda. La longitud del campo del resultado debe ser como mnimo tan grande como la longitud especificada en el factor 1. Si la subserie es mayor que el campo especificado en el campo del resultado, la subserie se trunca por la derecha. Si se especifica P como el ampliador de operacin, el campo del resultado se rellena por la derecha con blancos despus de la operacin. Nota: v No puede utilizar constantes figurativas en el factor 1, en el factor 2 ni en el campo de resultado v El solapamiento est permitido para el factor 1 y el campo del resultado v El solapamiento est permitido para el factor 2 y el campo del resultado. Para manejar las excepciones de SUBST (cdigo de estado de programa 100), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48.
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* La operacin SUBST extrae la subserie del factor 2 empezando en la C* posicin 3 con una longitud de 2. El valor 'CD' se sita en el C* campo del resultado TARGET. El indicador 90 no se activa porque no C* se produce ningn error. C C Z-ADD 3 T 2 0 C MOVEL 'ABCDEF' String 10 C 2 SUBST String:T Target 90 C* C* Enesta operacin SUBST, la longitud es mayor que la longitud de la C* serie menos la posicin de inicio ms 1. Como resultado, se activa C* el indicador 90 y no se modifica el campo de resultado. C C MOVE 'ABCDEF' String 6 C Z-ADD 4 T 1 0 C 5 SUBST String:T Result 90 C C* En esta operacin SUBST, se da una subserie de 3 caracteres empezando C* en la quinta posicin de la serie base. Como no se especific P, C* slo se modifican los 3 primeros caracteres de TARGET. C* TARGET contiene '123XXXXX'. C C Z-ADD 3 Length 2 0 C Z-ADD 5 T 2 0 C MOVE 'TEST123' String 8 C MOVE *ALL'X' Target C Length SUBST String:T Target 8
547
C* C* C* C* C C C C C C C C C* C* C* C* C* C* C* C C C C* C* C* C* C* C* C* C* C* C* C* C C C
Este ejemplo es igual que el anterior excepto en que se especific P, y el resultado se rellena con espacios en blanco. TARGET es igual a '123bbbbb'. Z-ADD 3 Z-ADD5 MOVE 'TEST123' MOVE *ALL'X' SUBST(P) String:T Length T String Target Target 2 0 2 0 8 8
Length
En el ejemplo siguiente, CITY contiene la serie "Toronto, Ontario". Se utiliza la operacin SCAN para localizar el espacio en blanco de separacin, que est en la posicin 9 en esta ilustracin. SUBST sin el factor 1 sita la serie que empieza en la posicin 10 hasta la longitud total de la serie en el campo TCNTRE. TCNTRE contiene 'Ontario'. ' ' SCAN City C ADD 1 C SUBST City:C TCntre Antes de la operaciones STRING='bbbJohnbbbbbb'. un campo de 10 caracteres que contiene 'ABCDEFGHIJ'. La operacin CHECK localiza el primer carcter que no es un espacio en blanco y activa el indicador 10, si existe dicho carcter. Si *IN10 est activado, la operacin SUBST da una subserie de STRING que empieza en el primer carcter no blanco hasta el final de STRING. Se rellena para asegurar que no queda nada del contenido anterior del campo del resultado. Si STRING contiene el valor ' HELLO ', RESULT va a contener el valor 'HELLO ' tras la operacin SUBST(P). Despus de las operaciones RESULT='Johnbbbbbb'. ' ' 10 CHECK STRING SUBST(P) STRING:ST ST RESULT 10
TAG (Etiqueta)
Cdigo TAG Factor 1 Etiqueta Factor 2 Campo de resultado Indicadores
La operacin declarativa TAG da nombre a la etiqueta que identifica el destino de una operacin GOTO o CABXX. Puede especificarse en cualquier lugar de los clculos. Puede emitirse GOTO dentro de una subrutina del procedimiento principal para ir a una operacin TAG dentro de la misma subrutina. Puede emitirse GOTO dentro de una subrutina de un subprocedimiento para ir a una operacin TAG dentro de la misma subrutina o dentro del cuerpo del subprocedimiento. El factor 1 debe contener el nombre del destino de una operacin GOTO o CABxx. Este nombre debe ser un nombre simblico exclusivo, que se especifica en el factor
548
2 de una operacin GOTO o en el campo del resultado de una operacin CABxx. El nombre puede utilizarse como un punto comn para operaciones GOTO o CABxx mltiples. No se permiten entradas de indicadores de condicionamiento (posiciones de 9 a 11). Si se bifurca a la operacin TAG desde un componente distinto de la aplicacin VRPG, puede producirse un bucle sin fin. La Figura 214 en la pgina 457 muestra algunos ejemplos de la operacin TAG.
TEST (D E)
ER
TEST (E T)
Formato de hora
ER
TEST (E Z)
ER
La operacin TEST permite comprobar la validez de los campos Fecha, Hora o Indicacin de la hora antes de utilizarlos. El factor 1 ha de estar en blanco si el campo del resultado contiene un campo de fecha, hora o indicacin de la hora. Si desea obtener informacin acerca de los formatos que puede utilizar, consulte las secciones Datos de fecha en la pgina 112, Datos de hora en la pgina 126 y Datos de indicacin de la hora en la pgina 128. Si el campo del resultado contiene campos declarados como de fecha, hora o indicacin de la hora, el factor 1 ha de estar en blanco y no se permiten los ampliadores de cdigo de operacin D, T y Z. Si el campo del resultado contiene campos declarados como de caracteres o numricos, debe especificarse uno de los cdigos de operacin siguientes: D, T o Z. Nota: Si el campo de resultado es un campo de caracteres sin separadores, el factor 1 debe contener el formato de fecha, hora o indicacin de la hora seguido por un cero. v Si el ampliador de cdigo de operacin incluye D (comprobar fecha): El factor 1 es opcional y puede contener cualquiera de los formatos de fecha. Consulte Datos de fecha en la pgina 112.
549
Si el factor 1 est en blanco, se presupone el formato especificado en la especificacin de control con la palabra clave DATFMT. Si esta palabra clave no est especificada, se presupone *ISO. v Si el ampliador de cdigo de operacin incluye T (comprobar hora): El factor 1 es opcional y puede contener cualquiera de los formatos de hora vlidos. Consulte la seccin Datos de hora en la pgina 126. Si el factor 1 est en blanco, se toma por omisin el formato especificado en la especificacin de control con la palabra clave TIMFMT. Si esta palabra clave no est especificada, se presupone *ISO. Nota: No se permite el formato de fecha *USA con el ampliador de cdigo de operacin (T). El formato de fecha *USA tiene una restriccin AM/PM por la que no puede convertirse a numrico cuando se utiliza un campo de resultado numrico. v Si el ampliador de cdigo de operacin incluye Z (comprobar indicacin de la hora), el factor 1 es opcional y puede contener *ISO o *ISO0. Consulte la seccin Datos de indicacin de la hora en la pgina 128. En los campos numricos se comprueba si la parte de dgitos de un valor de Fecha, Hora o Indicacin de la hora es vlida. En los campos de tipo carcter se comprueba la validez de los dgitos y los separadores. Para la operacin de comprobacin puede especificarse el ampliador E o un indicador de error ER, pero no ambos. Si el contenido del campo de resultado no es vlido, se seala el cdigo de estado 112. Entonces, se activa el indicador de error o la funcin incorporada %ERROR devuelve 1 dependiendo del mtodo de manejo de errores especificado. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48.
550
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D* D Datefield S D DATFMT(*JIS) D Num_Date S 6P 0 INZ(910921) D Char_Time S 8 INZ('13:05 PM') D Char_Date S 6 INZ('041596') D Char_Tstmp S 20 INZ('19960723140856834000') D Char_Date2 S 9A INZ('402/10/66') D Char_Date3 S 8A INZ('2120/115') D* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* El indicador 18 no se activar porque el campo de caracteres es C* un campo de indicacin de la hora *ISO vlido, sin separadores. C* C *ISO0 TEST (Z) Char_Tstmp 18 C* C* El indicador 19 no se activar porque el campo de caracteres es C* una fecha *MDY vlida, sin separadores. C* C *MDY0 TEST (D) Char_Date 19 C* C* %ERROR devolver '1', puesto que Num_Date no es *DMY. C* C *DMY TEST (DE) Num_Date C* C* No hay factor 1 ya que el resultado es un campo de tipo de datos D C* %ERROR devolver '0', puesto que el campo contiene una C* fecha vlida. C* C TEST (E) Datefield C* C* En la comprobacin siguiente, %ERROR devolver '1' puesto que C* Timefield no contiene una hora vlida en EE.UU. C* C *USA TEST (ET) Char_Time C* C* En la comprobacin siguiente, el indicador 20 se activa puesto que C* el campo de caracteres es una fecha *CMDY vlida, pero hay separadores. C* C *CMDY0 TEST (D) char_date2 20 C* C* En la comprobacin siguiente, %ERROR devolver '0' puesto que C* el campo de caracteres es una fecha *LONGJUL vlida. C* C *LONGJUL TEST (DE) char_date3
La operacin TESTB compara los bits identificados en el factor 2 con los bits correspondientes del campo denominado como campo del resultado. El campo del resultado debe ser un campo de carcter de una posicin. Los indicadores
Captulo 25. Cdigos de operacin
551
resultantes de las posiciones 71 a 76 reflejan el estado de los bits del campo del resultado. El factor 2 siempre es una fuente de bits para el campo del resultado. El factor 2 puede contener: v Nmeros de bit 0 a 7: Pueden comprobarse de 1 a 8 bits por operacin. Los bits que se han de comprobar se identifican por los nmeros 0 a 7. (0 es el bit situado ms a la izquierda). Los nmeros de bit deben encerrarse entre apstrofos. Por ejemplo, para comprobar los bits 0, 2 y 5, entre 025 en el factor 2. v Nombre de campo: Puede especificar en el factor 2 el nombre de un campo de caracteres de una posicin, un nombre de tabla o un elemento de matriz. Los bits activados en el campo, el nombre de tabla o el elemento de matriz se comparan con los bits correspondientes del campo de resultado; los bits desactivados no se tienen en cuenta. El campo especificado en el campo del resultado puede ser un elemento de matriz si cada elemento de la matriz es un campo de tipo carcter de una posicin. v Literal hexadecimal o constante con nombre: Puede especificar un literal hexadecimal o una constante con nombre hexadecimal de 1 byte. Los bits del factor 2 se comparan con los bits correspondientes del campo del resultado; los bits que estn desactivados no se consideran. La Figura 288 en la pgina 553 ilustra la utilizacin de la operacin TESTB. Los indicadores asignados en las posiciones 71 a 76 reflejan el estado de los bits del campo de resultado. Debe asignarse un indicador como mnimo, y pueden asignarse hasta tres para cada operacin. Para las operaciones TESTB, los indicadores resultantes se activan de la forma siguiente: v Posiciones 71 y 72: Un indicador en estos campos se activa si los nmeros de bit especificados en el factor 2 o todos los bits que estn activados en el campo del factor 2 estn desactivados en el campo del resultado. Todos los bits especificados estn desactivados. v Posiciones 73 y 74: Un indicador en estas posiciones se activa si los nmeros de bit especificados en el factor 2 o los bits que estn activados en el campo del factor 2 estn en un estado mixto (algunos estn activados y otros estn desactivados) en el campo del resultado. Como mnimo uno de los bits especificados est activado. Nota: Si slo se comprueba un bit, estas posiciones deben estar en blanco. Si se especifica un nombre de campo en el factor 2 y ste tiene un slo bit activado, el indicador en las posiciones 73 y 74 no se activa. v Posiciones 75 y 76: Un indicador en estas posiciones se activa si los nmeros de bit especificados en el factor 2 o todos los bits que estn activados en el campo del factor 2 estn activados en el campo del resultado. Todos los bits especificados estn activados. Nota: Si el campo del factor 2 no tiene bits activados, no se activan indicadores.
552
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* Los valores de bit del campo son FieldF = 00000001 y FieldG = 11110001. C* C* El indicador 16 se activa porque el bit 3 est desactivado (0) C* en FieldF. El indicador 17 est desactivado. C TESTB '3' FieldF 16 17 C* C* El indicador 16 se activa porque tanto el bit 3 como el 6 C* estn desactivados (0) en FieldF. Los indicadores 17 y 18 C* estn desactivados. C TESTB '36' FieldF 161718 C* C* El indicador 17 se activa porque el bit 3 est desactivado (0) C* y el bit 7 est activado (1) en FieldF. Los indicadores 16 y 18 C* estn desactivados. C TESTB '37' FieldF 161718 C* C* El indicador 17 se activa porque el bit 7 est activado (1) en FieldF. C* El indicador 16 est desactivado. C TESTB '7' FieldF 16 17 C* C* El indicador 17 se activa porque los bits 0,1,2 y 3 estn C* desactivados (0) y el bit 7 est activado (1). C* Los indicadores 16 y 18 estn desactivados. C TESTB FieldG FieldF 161718 C* C* El literal hexadecimal X'88' (10001000) se utiliza en el factor 2. C* El indicador 17 se activa porque un bit como mnimo (bit 0) est C* activado. Los indicadores 16 y 18 estn desactivados. C TESTB X'88' FieldG 161718
La operacin TESTN comprueba en un campo del resultado de tipo carcter la presencia de dgitos decimales con zona y de espacios en blanco. El campo de resultado debe ser un campo de tipo carcter. Para que se considere numrico, cada carcter del campo, excepto el situado ms a la derecha, debe contener una zona de hexadecimal 3 y un dgito (0 a 9). El carcter situado ms a la derecha es numrico si contiene un hexadecimal de 0 a 9, o una zona de A a F, y un dgito (de 0 a 9). Como resultado de la comprobacin los indicadores resultantes se activan de la forma siguiente: v Posiciones 71 y 72: El campo del resultado contiene caracteres numricos. v Posiciones 73 y 74: El campo del resultado contiene caracteres numricos y como mnimo, un espacio en blanco inicial. Por ejemplo, los valores b123 o bb123 activan este indicador. Sin embargo, el valor b1b23 no es un campo numrico vlido debido a los blancos intercalados, por lo tanto este valor no activa el indicador.
Captulo 25. Cdigos de operacin
553
Nota: No puede especificarse un indicador en las posiciones 73 y 74 al comprobar un campo de longitud 1 porque el campo de carcter debe contener como mnimo un carcter numrico y un blanco inicial. v Posiciones 75 y 76: El campo del resultado consta de espacios en blanco. Puede utilizarse el mismo indicador para ms de una condicin. Si se da alguna de las condiciones, el indicador se activa. La operacin TESTN puede utilizarse para validar campos antes de que se utilicen en operaciones donde su uso puede producir resultados no deseados o excepciones (por ejemplo, operaciones aritmticas).
La operacin TESTZ comprueba la zona del carcter situado ms a la izquierda en el campo de resultado. El campo de resultado debe ser un campo de tipo carcter. Los indicadores de resultados se activan en funcin del resultado de la comprobacin. Debe especificar como mnimo un indicador de resultado en las posiciones 71 a 74. Cualquier carcter con una zona positiva (0, 1, 2, 3, 8, 9, A, B hexadecimal) activa el indicador de las posiciones 71 y 72. Cualquier carcter con una zona negativa (4, 5, 6, 7, C, D, E, F hexadecimal) activa el indicador de las posiciones 73 y 74. Nota: la zona positiva/negativa depende del valor del segundo bit. Los valores 3 y 7 son los valores preferidos para el signo, sin embargo, se pueden utilizar los dems valores que se listan. .cp 25
La operacin TIME accede a la hora del sistema y, si se especifica, la fecha del sistema, en cualquier momento durante el proceso del programa. La hora y la fecha del sistema se pueden recuperar de un servidor AS/400 o de la estacin de trabajo. La hora del sistema se basa en un reloj de 24 horas. Si se especifica el factor 1, ste debe contener un literal que sea el nombre alias de un servidor AS/400. Si no se especifica el factor 1, se recupera la hora de la estacin de trabajo. El campo del resultado debe especificar el nombre de un campo numrico de 6, 12 14 dgitos (sin posiciones decimales). La hora del da o bien sta y la fecha del sistema, se graban en el campo del resultado
554
Campo de resultado Numrico de 6 dgitos Numrico de 12 dgitos Numrico de 14 dgitos Hora Fecha Indicacin de la hora
Valor devuelto Hora Hora y fecha Hora y fecha Hora Fecha Indicacin de la hora
Formato hhmmss hhmmssDDDDDD hhmmssDDDDDDDD Formato del resultado Formato del resultado *ISO
Nota: Si el campo del resultado es un campo numrico y se incluye la fecha del sistema, sta se sita en las posiciones 7 a 12 del campo del resultado. El formato de fecha es *YMD.
Para acceder slo a la hora del da, especifique el campo del resultado como un campo numrico de 6 dgitos. Para acceder tanto a la hora del da como a la fecha del sistema, especifique el campo del resultado como un campo numrico de 12 dgitos (parte de ao de 2 dgitos) o de 14 dgitos (parte de ao de 4 dgitos). La hora del da siempre se sita en las primeras seis posiciones del campo del resultado, en el formato siguiente: hhmmss (hh=horas, mm=minutos y ss=segundos) El formato de fecha depende del atributo de formato de fecha del trabajo DATFMT y puede ser mmddyy, ddmmyy, yymmdd o de fecha juliana. El formato de fecha juliana para la parte de ao de 2 dgitos contiene el ao en las posiciones 7 y 8, el da (del 1 al 366, ajustados por la derecha, con ceros en las posiciones de orden superior no utilizadas) en las posiciones de 9 a 11, y 0 en la posicin 12. Para la parte de ao de 4 dgitos, contiene el ao en las posiciones de 7 a 10, el da (del 1 al 366, ajustados por la derecha, con ceros en las posiciones de orden superior no utilizadas) en las posiciones de 11 a 13, y 0 en la posicin 14. Si el campo del resultado es un campo de indicacin de la hora, los 3 ltimos dgitos de la parte de microsegundos son siempre 000. Los campos especiales UDATE y *DATE contienen la fecha del trabajo. Estos valores no se actualizan al pasar la medianoche o cuando la fecha del trabajo se modifica durante la ejecucin del programa.
555
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* Cuando se procesa la operacin TIME (con un campo numrico de 6 C* dgitos), la hora actual (con el formato hhmmss) se coloca en el C* campo de resultado CLOCK. La operacin TIME se basa en un reloj de C* 24 horas; por ejemplo, 132710. (En el sistema de 12 horas, 132710 C* es 1:27:10 p.m.) puede especificarse CLOCK C* en las especificaciones de salida. C TIME Clock 6 0 C* Cuando se procesa la operacin TIME (con un campo numrico de 12 C* dgitos), el da y la hora actual se colocan en el campo de resultado C* TIMSTP. Los seis primeros dgitos son la hora y los seis ltimos son C* la fecha; por ejemplo, 093315121579 es 9:33:15 de la C* maana del 15 de diciembre de 1979. Despus se puede especificar TIMSTP C* en las especificaciones de salida. C TIME TimStp 12 0 C MOVEL TimStp Time 6 0 C MOVE TimStp SysDat 6 0 C* En este caso se duplica el ejemplo anterior de 12 dgitos, pero se C* usa un campo de 14 dgitos. Los seis primeros son la hora y los C* 8 ltimos son la fecha; por ejemplo, 13120001101992 indica la C* 1:12:00 de la tarde del 10 de enero de 1992. C* Despus se puede especificar TIMSTP en las especificaciones de C* salida. C TIME TimStp 14 0 C MOVEL TimStp Time 6 0 C MOVE TimStp SysDat 8 0
La operacin UNLOCK desbloquea reas de datos y libera bloqueos de registros. Para manejar las excepciones de UNLOCK (cdigo de estado del programa 401-421, 431 y 432), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48. Las posiciones 71, 72, 75 y 76 deben estar en blanco.
556
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* TOTAMT, TOTGRS y TOTNET se definen como reas de datos en el C* sistema. La operacin IN recupera todas las reas de datos C* definidas en el programa. El programa procesa clculos y a C* continuacin desbloquea las reas de datos. Las reas de datos C* pueden ser utilizadas posteriormente por otros programas. C* C *LOCK IN *DTAARA C : C : C UNLOCK *DTAARA C *DTAARA DEFINE TOTAMT 8 2 C *DTAARA DEFINE TOTGRS 10 2 C *DTAARA DEFINE TOTNET 10 2
557
Factor 1
Campo de resultado
Indicadores _ ER _
La operacin UPDATE modifica el ltimo registro bloqueado que se ha recuperado para procesarse desde un archivo o subarchivo de disco de actualizacin. No debe realizarse ninguna otra operacin en el archivo entre la operacin de entrada que ha recuperado y bloqueado el registro y la operacin UPDATE. Las operaciones como, por ejemplo, READ, READC, READE, READP, READPE y CHAIN recuperan y bloquean un registro. Si dichas operaciones de entrada no se realizan satisfactoriamente, no se bloquea el registro y no se puede emitir UPDATE. El registro debe volverse a leer con el valor por omisin de blanco en el ampliador de operacin para especificar una solicitud de bloqueo. Despus de una operacin UPDATE satisfactoria, la siguiente operacin de entrada secuencial recupera el registro siguiente al registro actualizado. Las operaciones UPDATE consecutivas para el mismo archivo o registro no son vlidas. Deben emitirse intercaladamente operaciones de lectura satisfactorias para posicionar y bloquear el registro a actualizar. El factor 2 debe contener el nombre de un archivo, subarchivo o formato de registro que se ha de actualizar. Si se especifica un nombre de archivo, dicho archivo debe estar descrito por programa. Si se especifica un nombre de formato de registro, el archivo debe estar descrito externamente. El nombre de formato de registro debe ser el nombre del ltimo registro que se ha ledo del archivo; de lo contrario se produce un error. El campo del resultado debe contener un nombre de estructura de datos si el factor 2 es un nombre de archivo. El registro actualizado se graba directamente desde la estructura de datos al archivo. El campo del resultado debe estar en blanco si el factor 2 contiene el nombre de formato de registro. Para manejar las excepciones de UPDATE (cdigos de estado de archivo mayores que 1000), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones/errores de archivo en la pgina 37. Nota: Si se han de actualizar slo algunos de los campos de un registro, en vez de todos, utilice las especificaciones de salida y no la operacin UPDATE. Consulte la seccin Soporte de valores nulos de base de datos en la pgina 128, si desea obtener informacin acerca de cmo leer registros con campos con posibilidad de nulos.
558
El cdigo de operacin WHEN es similar al cdigo de operacin WHENxx en que controla el proceso de las lneas en una operacin SELECT. Difiere en que la condicin se especifica mediante una expresin lgica en la entrada del factor 2 ampliado. Las operaciones controladas por la operacin WHEN se procesan cuando es cierta la expresin del campo del factor 2 ampliado. Consulte el apartado Captulo 24. Expresiones en la pgina 351 para obtener detalles acerca de las expresiones. Si desea obtener informacin acerca de cmo utilizar los ampliadores de operacin M y R, consulte el apartado Reglas de precisin para operaciones numricas en la pgina 358. En el apartado Operaciones de comparacin en la pgina 375 se describen las normas generales para la especificacin de operaciones de comparacin.
CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++.. C* C SELECT C WHEN *INKA C : C : C : C WHEN NOT(*IN01) AND (DAY = 'FRIDAY') C : C : C : C WHEN %SUBST(A:(X+4):3) = 'ABC' C : C : C : C OTHER C : C : C : C ENDSL
Las operaciones WHENxx de un grupo de seleccin determinan a dnde pasa el control despus de procesar la operacin SELECT. La operacin WHENxx condicional es cierta si el factor 1 y el factor 2 tienen la relacin especificada por xx. Si la condicin es cierta, las operaciones que siguen a WHENxx se procesan hasta la siguiente operacin WHENxx, OTHER, ENDSL o END. Al llevar a cabo la operacin WHENxx tenga en cuenta lo siguiente: v Tras procesarse el grupo de operacin, el control pasa a la sentencia siguiente a la operacin ENDSL. v Pueden codificarse condiciones WHENxx complejas utilizando ANDxx y ORxx. Los clculos se procesan cuando se cumple la condicin especificada por las operaciones WHENxx, ANDxx y ORxx. v El grupo WHENxx puede estar vaco.
559
560
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* Ejemplo de grupo SELECT con expresiones WHENxx complejas. Se supone C* que el usuario ha entrado un registro y un cdigo de accin. C* Seleccione una de las opciones siguientes: C* * Al pulsar F3, se ejecuta la subrutina QUIT. C* * Si se entra el cdigo de accin (Acode) A (aadir) y el C* registro no existe (*IN50=1), graba el registro. C* * Si se entra el cdigo de accin A, el registro existe C* y su cdigo de registro activo es D (suprimido); se C* actualiza el registro con cdigo de registro activo = A. C* Si se entra el cdigo de accin D, el registro existe y el C* cdigo de accin en el cdigo de registro (AcRec) es A, C* se marca el registro como suprimido. C* * Cuando el cdigo de accin es C (modificacin), el registro C* existe y el cdigo de accin en el cdigo de registro C* (AcRec) es A, se actualiza el registro. C* * En cualquier otro caso, se ejecuta un proceso de error. C* C RSCDE CHAIN FILE 50 C SELECT C *INKC WHENEQ *ON C EXSR QUIT C Acode WHENEQ 'A' C *IN50 ANDEQ *ON C WRITE REC C Acode WHENEQ 'A' C *IN50 ANDEQ *OFF C AcRec ANDEQ 'D' C Acode OREQ 'D' C *IN50 ANDEQ *OFF C AcRec ANDEQ 'A' C MOVE Acode AcRec C UPDATE REC C Acode WHENEQ 'C' C *IN50 ANDEQ *OFF C AcRec ANDEQ 'A' C UPDATE REC C OTHER C EXSR ERROR C ENDSL
561
Si el archivo especificado en el factor 2 est descrito por programa, el campo del resultado debe contener el nombre de una estructura de datos. El registro se graba en el archivo desde la estructura de datos Un archivo descrito externamente se identifica mediante una E en la posicin 22 de las especificaciones de descripcin de archivo. Si el factor 2 contiene un nombre de formato de registro, se utilizan los valores actuales del programa para todos los campos de la definicin de registro se utilizan para construir el registro. Cuando se graban en un archivo registros que utilizan nmeros de registro relativo, el nombre de campo especificado en la palabra clave de especificacin de Archivo RECNO (nmero relativo de registro) debe actualizarse para que contenga el nmero relativo de registro del registro que se ha de grabar. En los archivos locales, los registros se graban al final de archivo. Se ignora la palabra clave RECNO. Para aadir registros a un archivo DISK remoto utilizando la operacin WRITE, debe especificarse una A en la posicin 20 de las especificaciones de descripcin de archivo. En los archivos locales, los registros se aaden al final de archivo. Consulte Posicin 20 (Adicin de archivo) en la pgina 216para obtener ms informacin. Para manejar las excepciones de WRITE (cdigos de estado de archivo mayores que 1000), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Se produce un error si se alcanza el desbordamiento para un archivo de impresin descrito externamente y no se ha especificado un indicador de desbordamiento en la especificacin de descripcin de archivo. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones/errores de archivo en la pgina 37. Puede especificar un indicador en las posiciones 75-76 para sealar si se ha producido un fin de archivo (el subarchivo est lleno) en la operacin WRITE. El indicador se activa (condicin EOF) o desactiva cada vez que se lleva a cabo la operacin WRITE. Esta informacin puede obtenerse tambin a partir de la funcin incorporada %EOF, que devuelve 1 si se produce una condicin EOF y 0 en caso contrario.
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* La operacin WRITE graba los campos de la estructura de datos C* DS1 en el archivo FILE1. C* C WRITE FILE1 DS1
562
Cuando se graba en una ventana, los valores almacenados en los campos correspondientes se utilizan para establecer los atributos de los componentes de campos de entrada y de los componentes de texto esttico. Despus de la operacin WRITE, los valores almacenados en los campos coinciden con los valores de la pantalla. Si hay muchos campos de texto esttico y de entrada, utilice la operacin WRITE en lugar de mltiples operaciones SETATR. Por ejemplo, si la ventana INVENTORY contiene los componentes de campo de entrada ENT0000B y ENT0000C, una operacin WRITE de la ventana realiza lo equivalente a lo siguiente:
CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++++ C EVAL %setatr('inventory':'ent0000B':'text') = ENT0000B C EVAL %setatr('inventory':'ent0000C':'text') = ENTd000C
XFOOT suma los elementos de una matriz y sita el resultado de la suma en el campo especificado como campo de resultado. El factor 2 contiene el nombre de la matriz. Si se especifica redondeo, ste se produce despus de que todos los elementos se hayan sumado y antes de que el resultado se haya transferido al campo de resultado. Si el campo del resultado es un elemento de la matriz especificada en el factor 2, se utiliza el valor del elemento antes de efectuarse la operacin XFOOT para calcular el valor total de la matriz. Si la matriz es de coma flotante, la operacin XFOOT se efectuar del modo siguiente: cuando la matriz est en orden descendente, los elementos se irn sumando en el orden inverso. De lo contrario, los elementos se irn sumando a partir de los primeros elementos de la matriz. En el apartado Operaciones aritmticas en la pgina 367 se describen las normas generales para la especificacin de operaciones aritmticas. La Figura 162 en la pgina 368 contiene un ejemplo de la operacin XFOOT.
563
XLATE (Convertir)
Cdigo XLATE (E P) Factor 1 De:A Factor 2 Serie origen:inicio Campo de resultado Serie de destino Indicadores _ ER _
La operacin XLATE convierte los caracteres de la serie de origen (factor 2) que coinciden con la serie De en los caracteres correspondientes de la serie A. XLATE empieza convirtiendo la serie origen en la posicin especificada en el factor 2 y contina, carcter a carcter, de izquierda a derecha. Si un carcter en la serie de origen existe en la serie De, el carcter correspondiente de la serie A se coloca en el campo del resultado. Todos los caracteres del campo origen anteriores a la posicin de inicio se sitan, sin modificar, en el campo del resultado. Nota: v Las series Desde, A, Origen y Destino deben ser del mismo tipo, todas ellas de tipo carcter, grfico o UCS-2. Adems, sus CCSID deben ser iguales, a no ser que, en el caso de los campos de tipo grfico, se haya especificado CCSID(*GRAPH: *IGNORE) en la especificacin de control. v No pueden utilizarse constantes figurativas en los campos del factor 1, factor 2 resultado. No se permite solapado en una estructura de datos para el factor 1 y el campo del resultado o para el factor 2 y el campo del resultado. El factor 1 debe contener la serie De, seguida de dos puntos, seguidos, a su vez, por la serie A. Las series De y A pueden contener un nombre de campo, un elemento de matriz, un nombre de estructura de datos, un literal o un nombre de tabla. Si un carcter de la serie De est duplicado, se utiliza la primera aparicin (situada ms a la izquierda). El factor 2 debe contener la serie de origen o la serie de origen seguida de dos puntos y la posicin de inicio. La porcin del factor 2 de la serie origen puede contener un nombre de campo, un elemento de matriz, una constante con nombre, un nombre de estructura de datos, un literal o un nombre de tabla. Si la operacin utiliza datos de tipo grfico o UCS-2, la posicin de inicio hace referencia a caracteres de doble byte. La posicin de inicio del factor 2 debe se numrica sin posiciones decimales y puede ser una constante con nombre, un elemento de matriz, un nombre de campo, un literal o un nombre de tabla. Si no se especifica ninguna posicin de inicio, el valor por omisin es 1. El campo del resultado puede ser un campo, un elemento de matriz, una estructura de datos o una tabla. La longitud del campo del resultado debe ser tan grande como la serie de origen especificada en el factor 2. Si el campo del resultado es mayor que la serie de origen, el resultado se ajusta por la izquierda. Si el campo del resultado es mayor que la serie de origen y se especifica el ampliador de operacin P, el resultado se rellena por la derecha con blancos despus de la conversin. Si el campo del resultado es menor que la serie de origen, el campo del resultado contiene la parte situada ms a la izquierda del origen convertido. Nota: Si el campo del resultado es grfico y se especifica el ampliador de operacin P, se utilizan espacios en blanco grficos. Si el campo del resultado es de tipo UCS-2 y se especifica P, se utilizarn los blancos de UCS-2.
564
Para manejar las excepciones de XLATE (cdigo de estado de programa 100), puede especificarse el ampliador de cdigo de operacin E o un indicador de error ER, pero no ambos. Para obtener ms informacin sobre la gestin de errores, consulte el apartado Excepciones y errores de programa en la pgina 48.
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* El ejemplo siguiente convierte el blanco de NUMBER a '-'. El C* resultado en RESULT ser '999-9999'. C* C MOVE '999 9999' Number 8 C ' ':'-' XLATE Number Result 8
El factor 2 se aade a un campo de ceros. La suma se sita en el campo de resultado. El factor 2 debe ser numrico y puede contener una matriz, un elemento de matriz, un campo, una constante figurativa, un literal, una constante con nombre, un subcampo o un nombre de tabla. El campo del resultado debe ser numrico y puede contener una matriz, un elemento de matriz, un subcampo o un nombre de tabla. Puede especificarse redondeo. En el apartado Operaciones aritmticas en la pgina 367 se describen las normas generales para la especificacin de operaciones aritmticas. La Figura 162 en la pgina 368 muestra ejemplos de la operacin Z-ADD.
Captulo 25. Cdigos de operacin
565
El factor 2 se resta de un campo de ceros. La diferencia, que es el negativo del factor 2, se sita en el campo del resultado. El factor 2 debe ser numrico y puede contener una matriz, un elemento de matriz, un campo, una constante figurativa, un literal, una constante con nombre, un subcampo o un nombre de tabla. El campo del resultado debe ser numrico y puede contener una matriz, un elemento de matriz, un subcampo o un nombre de tabla. Puede especificarse redondeo. En el apartado Operaciones aritmticas en la pgina 367 se describen las normas generales para la especificacin de operaciones aritmticas. La Figura 162 en la pgina 368 muestra ejemplos de la operacin Z-SUB.
566
Parte 5. Apndices
567
568
Apndice A. Restricciones
Funcin Longitud de registro de entrada de matriz/tabla para compilacin Longitud de campo de tipo carcter Longitud de campo grfico o UCS-2 Longitud de la estructura de datos (nombrada) Longitud de la estructura de datos (no nombrada) Restriccin La longitud mxima es 100 La longitud mxima es de 65535 bytes La longitud mxima es de 32766 Mximo de 65535 Mximo de 9999999
Apariciones (nmero de) estructura de datos Mximo de 32767 por estructura de datos Palabra de edicin Elementos de una matriz/tabla (palabra clave DIM en las especificaciones de definicin) Niveles de anidamiento en grupos estructurados Literal o constante con nombre Longitud mxima de 24 para los literales o 115 para las constantes con nombre Mximo de 32767 por matriz/tabla
Mximo de 100 Longitud mxima de 1024 bytes para un literal UCS-2, grfico, hexadecimal o de caracteres, y de 30 dgitos con 30 posiciones decimales para un literal numrico Mximo de 25
Mximo de 32767 bytes Tamao total de todos los parmetros pasados a los programas remotos de AS/400 (CALL) Parmetros pasados a las funciones llamadas Mximo de 399 (CALLB) Parmetros pasados a los EXE, CMD, COM y BAT locales (CALLP) Archivos de impresora Lneas de impresin por pgina Estructura de datos del estado de programa Longitud de registro Mximo de 20 o un total de 1024 bytes. Mximo de 8 por programa Mnimo de 2; mximo de 255 Slo 1 permitido por programa La longitud mxima es 99999.1
Nota: 1Toda restriccin del tamao de registro de dispositivo prevalece sobre este valor.
569
570
Menos v Ampliadores: (D) (E) (H) (M) (N) (P) (R) (T) Campo de fecha Manejo de errores Redondeo (redondear el resultado numrico) Reglas de precisin por omisin No bloquear registro Rellenar el resultado con espacios en blanco o ceros Reglas de precisin de Posicin decimal de resultado Campo de hora
(Z) Campo de indicacin de la hora v Smbolos de indicadores resultantes: BL BN BOF EOF EQ ER FD HI IN LO LR NR NU OF ON Z ZB Blanco(s) Blanco(s) que se transforma(n) en nmeros Principio del archivo Fin del archivo Igual Error Encontrado Mayor que Indicador Menos que ltimo registro No se ha encontrado ningn registro Numrico Desactivado Activado Cero Cero o espacio en blanco
571
Cdigos ADD (H) ADDDUR (E) ALLOC (E) ANDxx BEGACT BEGSR BITOFF BITON CABxx CALL (E) CALLB (E)
Nmeros de bit Nmeros de bit Comparando Comparando Nombre del programa Nombre de procedimiento o Puntero de procedimiento
CALLP (M/R) CASxx CAT (P) CHAIN (E N) CHECK (E) Comparando Serie de origen 1 Argumento de bsqueda Serie del comparador Serie del comparador *NOKEY
NAME{ (Parm1 {:Parm2...}) } Comparando Serie de origen 2: nmero de blancos Nombre de archivo Serie base:inicio Nombre de subrutina Serie de destino Estructura de datos Posiciones ms a la izquierda Posiciones ms a la derecha Nombre de: estructura, variable o ventana ER ER ER Comparando Comparando Puntero HI LO ER EQ NR2 ER ER FD2 HI LO EQ
CHECKR (E)
Serie base:inicio
ER
FD2
CLEAR
*ALL
DEALLOC (E/N)
572
Argumento de Nombre de formato bsqueda, ndice de registro, nombre de subarchivo de subarchivo o nombre de archivo Dividendo Valor inicial Divisor Valor lmite Cociente Valor de ndice
NR2
ER
DIV (H) DO DOU (M/R) DOUxx DOW (M/R) DOWxx DSPLY (E)
Expresin de indicador Comparando Comparando Expresin de indicador Comparando Identificador de mensaje Comparando Nombre especificacin de definicin Campo numrico ER
ELSE END ENDACT ENDCS ENDDO ENDOR ENDIF ENDSL ENDSR EVAL (H M/R) EVALR (M/R) EXCEPT EXSR EXTRCT (E) FEOD (E) FOR GETATR (E) GOTO IF (M/R) Nombre de componente Etiqueta Punto de retorno Resultado = Expresin Resultado = Expresin Nombre EXCEPT Nombre de subrutina de usuario Fecha/Hora:Cdigo de duracin Nombre de archivo Campo de destino ER ER Valor de incremento Valor de incremento Punto de retorno
nombre-ndice = valor-inicial BY incremento TO | DOWNTO lmite Nombre de atributo Etiqueta Expresin de indicador Nombre de campo ER
573
Cdigos IFxx IN (E) ITER KFLD KLIST LEAVE LEAVESR LOOKUP1 (matriz) LOOKUP1 (tabla) MOVE (P) MOVEA (P) MOVEL (P) MULT (H) MVR OCCUR (E) OPEN (E) ORxx OTHER OUT (E) PARM PLIST POST (E)3 READ (E N)
Campo de resultado
ER
Nombre de matriz Nombre de tabla Campo de origen Origen Nombre de tabla Campo de destino Destino Campo de destino Producto Resto
HI HI + + + + +
LO LO ER ER
EQ6 EQ6 ZB ZB ZB Z Z
Valor de aparicin
Valor de aparicin
Comparando
Comparando
ER
Nombre de archivo Nombre archivo, nombre registro, nombre ventana Nombre de registro
ER ER EOF5
Nombre archivo, nombre registro Nombre archivo, nombre registro Nombre archivo, nombre registro
574
Factor 1
Campo de resultado
*NOKEY
*ALL
RETURN (H M/R) ROLBK (E) SCAN (E) Serie del comparador: longitud
ER ER ER OF ON ER EQ OF ON
Nombre de ventana Nombre de matriz Valor Nombre componente o nombre archivo Nombre de componente lgico Minuendo Fecha/Hora/ Indicacin de la hora Fecha/Hora/ Indicacin de la hora Longitud a extraer Etiqueta Sustraendo Fecha/Hora/ Indicacin de la hora Duracin:Cdigo de duracin Serie base:inicio Diferencia Duracin: Cdigo de duracin Fecha/Hora/ Indicacin de la hora Serie de destino + Raz Nombre de PLIST
ER
STOP (E) SUB (H) SUBDUR (E) (duracin) SUBDUR (E) (fecha nueva) SUBST (E P) TAG
ER ER Z
ER
ER
575
Factor 1
Factor 2
TEST (D E)8
Formato de fecha
Campo de caracteres o numrico Campo de caracteres o numrico Campo de caracteres o numrico Nmeros de bit Campo de caracteres Campo de caracteres Campo de caracteres OF NU +
ER
TEST (E T)8
Formato de hora
ER
TEST (E Z)8
ER
ON BN
EQ BL
Campo de destino rea de datos, registro o nombre de archivo Nombre de archivo, de formato de registro o de ventana Estructura de datos4 ER
UPDATE (E)
ER
Expresin de indicador Comparando Nombre de: archivo, Estructura formato de registro, de datos4 subarchivo o ventana Nombre de matriz De:A Serie:inicio Sumando Sustraendo Suma Serie de destino Suma Diferencia + + + ER EOF5
ER
Z Z
576
Cdigos Notas:
Factor 1
Factor 2
Campo de resultado
1. Como mnimo es necesario un indicador resultante. 2. La funcin %FOUND puede utilizarse como una alternativa a especificar un indicador resultante NR o FD. 3. Deber especificar el factor 2 o el campo del resultado. Pueden especificarse los dos. 4. Slo se permite una estructura de datos en el campo del resultante cuando el factor 2 contiene un nombre de archivo descrito por el programa. 5. La funcin %EOF puede utilizarse como una alternativa a especificar un indicador resultante EOF o BOF. 6. La funcin incorporada %EQUAL puede utilizarse para comprobar las operaciones SETLL y LOOKUP. 7. En todos los cdigos de operacin con el ampliador E, podr especificar el ampliador E o un indicador de errores ER, pero no podr especificar los dos. 8. Deber especificar el ampliador E o un indicador de errores para la operacin TEST.
577
578
Espacio
579
580
209 210 211 212 213 214 215 216 217 218 . .
225 . .
581
Apstrofo, signo 39 nmero primo Parntesis de apertura Parntesis de cierre Asterisco Signo ms Coma Guin, menos Coma, coma decimal Sesgo 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
582
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ]
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D
91 92 93
583
584
585
586
Ciclo RPG
Puesto que el ciclo RPG no est soportado en VisualAge RPG, los indicadores asociados al ciclo no estn soportados. Tampoco estn soportadas las entradas en las especificaciones asociadas al ciclo RPG.
Indicadores no soportados
La siguiente utilizacin de indicadores no est soportada: Indicadores de desbordamiento *INOA - *INOG, *INOV, *IN01 - *IN99, 1P Indicadores identificadores de registro H1 - H9, L1 - L9, U1 - U8, RT Indicadores de nivel de control L1 - L9 Indicadores de campo H1 - H9, U1 - U8, RT
Copyright IBM Corp. 1994, 2000
587
Indicadores resultantes H1 - H9, OA - OG, OV, L1 - L9, U1 - U8,KA - KN, KP - KY, RT Condicionamiento de archivo La palabra clave EXTIND no est soportada en las especificaciones de descripcin de archivo de VisualAge RPG. Esto significa que no puede utilizar indicadores en el condicionamiento de archivos.
Palabras no soportadas
A continuacin se describen las palabras con funciones especiales y palabras reservadas que no estn soportadas en VisualAge RPG. v *ALTSEQ, *EQUATE, *FILE, v Fecha de usuario: Los programas de VisualAge RPG no pueden ejecutarse por lotes. Por consiguiente, no se aplica ninguna de las reglas para fecha de usuario y programas por lotes a los programas de VisualAge RPG. Para obtener una descripcin de las palabras de VisualAge RPG, consulte el captulo 1, Captulo 1. Nombres simblicos y palabras reservadas en la pgina 3.
588
hexadecimal C para nmeros positivos y hexadecimal D para nmeros negativos. VisualAge RPG tambin da soporte a hexadecimal A, E, y F para nmeros positivos y hexadecimal B para nmeros negativos. Tipo de datos puntero de procedimiento La longitud de un campo puntero de procedimiento ILE RPG para AS/400 es de 16 bytes y debe estar alineado en un lmite de 16 bytes. La longitud de un campo puntero de procedimiento VisualAge RPG es de 4 bytes y debe estar alineado en un lmite de 4 bytes. Formato decimal con zona ILE RPG para AS/400 utiliza hexadecimal F para nmeros positivos y hexadecimal D para nmeros negativos. VisualAge RPG utiliza hexadecimal 3 para nmeros positivos y hexadecimal 7 para nmeros negativos. VisualAge RPG tambin da soporte al hexadecimal 0, 1, 2, 8, 9, A y B para nmeros positivos y hexadecimal 4, 5, 6, C, D, E y F para nmeros negativos.
reas de datos
El rea de datos locales y el rea de datos Parmetros de inicializacin de programa no estn soportados. No puede utilizar: v La operacin *DTAARA DEFINE, con *LDA o *PDA en el factor 2 y un nombre del campo del resultado v DTAARA(*LDA) o DTAARA(*PDA) en una especificacin de definicin.
589
Para obtener ms informacin sobre el soporte del rea de datos en VisualAge RPG, consulte el Captulo 11. Estructuras de datos en la pgina 147.
Matrices y tablas
VisualAge RPG no da soporte a los siguientes cdigos de operacin en matrices y tablas: MLLZO, MHHZO, MLHZO, MHLZO El sistema AS/400 es un sistema EBCDIC mientras que el sistema OS/2 es un sistema ASCII. VisualAge RPG utiliza el orden de clasificacin ASCII. Para obtener ms informacin, consulte el Captulo 12. Utilizacin de matrices y tablas en la pgina 157. Nota: Los datos grficos y la palabra clave ALTSEQ no estn soportados en las matrices. Para obtener informacin adicional sobre las matrices y tablas de VisualAge RPG, consulte el Captulo 12. Utilizacin de matrices y tablas en la pgina 157.
Cdigos de edicin
Los cdigos de edicin definidos por el usuario no estn soportados. Para obtener una descripcin de los cdigos de edicin y palabras soportados en VisualAge RPG, consulte el Captulo 13. Edicin de campos numricos en la pgina 173. Para obtener informacin sobre los componentes GUI de edicin, consulte la publicacin Programacin con VisualAge para RPG, SC10-3067-02 (SC09-2449-02). | | | | | |
Archivos
En VisualAge RPG, el contenido del rea de retorno de entrada/salida dependiente de dispositivo del archivo se copia en la seccin de retorno dependiente de dispositivo de la INFDS nicamente despus de realizar un POST en el archivo. Para obtener ms informacin, consulte el apartado POST (Anotar) en la pgina 509.
Especificaciones
VisualAge RPG no da soporte a los siguientes registros: v Registros de traduccin de archivo v Registros de orden de clasificacin alterno
Especificaciones de control
Para obtener informacin ms detallada sobre las especificaciones de control de VisualAge RPG, consulte el Captulo 16. Especificaciones de control en la pgina 201.
reas de datos
Si no proporciona informacin sobre cmo generar y ejecutar la aplicacin en las especificaciones de control, ILE RPG busca un rea de datos llamada RPGLEHSPEC en la lista de bibliotecas (*LIBL). Si no la encuentra, entonces ILE RPG busca un rea de datos llamada DFTLEHSPEC en QRPGLE. VisualAge RPG no busca ninguna rea de datos en *LIBL o QRPGLE.
Palabras clave
Las palabras clave siguientes no estn soportadas en la especificacin de control de VisualAge RPG: v ACTGRP
590
v v v v v v v v v v v v v v v v
ALTSEQ BNDDIR DFTACTGRP DFTNAME ENBPFRCOL FIXNBR FORMSALIGN FTRANS LANGID OPENOPT OPTIMIZE PRFDTA SRTSEQ TEXT THREAD USRPRF
Los valores *{NO}SRCSTMT y *{NO}DEBUGIO de la palabra clave OPTION no estn soportados. El parmetro de la palabra clave CCSID debe ser un CCSID de estacin de trabajo. Las palabras clave siguientes son especficas de VisualAge RPG para las especificaciones de control: v CACHE v CACHEREFRESH v CVTOEM v LIBLIST v SQLBINDFILE v SQLDBBLOCKING v SQLDBNAME v SQLDTFMT v SQLISOLATIONLVL v SQLPACKAGENAME v SQLPASSWORD v SQLUSERID Para obtener una descripcin del soporte de palabras clave para las especificaciones de control de VisualAge RPG, consulte el apartado Posiciones 7-80 (Palabras clave) en la pgina 201.
Soporte de archivos
VisualAge RPG no da soporte a un nmero de archivos soportados por ILE RPG. La siguiente lista detalla cules son los archivos no soportados por VisualAge RPG, as como qu posiciones se ven afectadas en la especificacin de descripcin de archivo. archivos primarios, archivos secundarios, archivos de direcciones de registros ILE RPG da soporte a una clase de archivo (posicin 18) en los archivos primarios, los archivos secundarios y los archivos de direcciones de registros. VisualAge RPG no da soporte a estos archivos.
Apndice E. Comparacin de los compiladores RPG
591
archivos de direcciones de registros y archivos de ndices v VisualAge RPG slo da soporte a una entrada de espacio en blanco en la longitud de clave o direccin de registros (posiciones 29-33). v El tipo de direccin de registro (posicin 34) de un programa VisualAge RPG no puede contener la A (teclas de carcter), P (teclas empaquetadas), G (teclas de grficos), D (teclas de fecha), T (teclas de hora) o Z (teclas de indicacin de la hora). v La entrada de organizacin de archivos (posicin 35) de un programa VisualAge RPG no puede contener una entrada I (archivos de ndices) o T (archivos de direcciones de registros). archivos WORKSTN v ILE RPG da soporte a un tipo de archivo (posicin 17) de Combinado, vlido para los archivos SPECIAL y WORKSTN. Puesto que VisualAge RPG no da soporte a los archivos WORKSTN, la especificacin de un tipo de archivo de combinado slo se puede aplicar a los archivos SPECIAL. Mtodos de proceso de archivos en disco VisualAge RPG no da soporte al acceso secuencial dentro de los lmites.
Palabras clave
Las palabras clave siguientes no estn soportadas en las especificaciones de descripcin de archivo de un programa VisualAge RPG:
DEVID KEYLOC PGMNAME SFILE EXTIND MAXDEV RAFDATA SLN FORMOFL OFLIND SAVEDS INDDS PASS SAVEIND
Estas son las palabras clave de especificacin de descripcin de archivo especficas de VisualAge RPG: EXTFILE(nombarch) La palabra clave EXTFILE le permite especificar un nombre de archivo local real durante la ejecucin, en lugar de dar el nombre durante la compilacin. PROCNAME (nombreproced) Si entra SPECIAL en la entrada de dispositivo (posicin 42), el mdulo que especifique como nombreproced maneja el soporte del dispositivo. RCDLEN(nombrecampo) La palabra clave RCDLEN se puede utilizar para los archivos DISK locales. REMOTE Si entra DISK (posicin 36-42), la palabra clave REMOTE especifica que el dispositivo de disco se encuentra en un servidor AS/400.
592
Para obtener una descripcin del soporte de palabras clave para las especificaciones de descripcin de archivo de VisualAge RPG, consulte el apartado Posiciones 44-80 (Palabras clave) en la pgina 219.
Especificaciones de definicin
VisualAge RPG da soporte a las ventanas de mensaje. Las ventanas de mensajes estn especificadas en la especificacin de definicin entrando una M en la posicin 24 y un espacio en blanco en la posicin 25. Para obtener ms informacin sobre las ventanas de mensaje, consulte el Captulo 18. Especificaciones de definicin en la pgina 227.
Palabras clave
A continuacin se describen las diferencias de las palabras clave de especificacin de definicin entre ILE RPG y VARPG. ASCEND y DESCEND ILE RPG utiliza el orden de clasificacin EBCDIC. VisualAge RPG utiliza el orden de clasificacin ASCII. Puesto que VisualAge RPG no da soporte a ALTSEQ, la aplicacin de VisualAge RPG no puede utilizar una secuencia alternativa para comprobar la secuencia de las matrices y tablas durante la compilacin. DTAARA VisualAge RPG no da soporte a las reas de datos locales (*LDA) con la palabra clave DTAARA. Las siguientes palabras clave no estn soportadas para las especificaciones de definicin en un programa VisualAge RPG: v EXPORT v EXTPGM v IMPORT v OPDESC v OPTIONS(*NOPASS) Las palabras clave siguientes son especficas de VisualAge RPG para las especificaciones de definicin: BUTTON(botn1:botn2...) Utilice la palabra clave BUTTON para definir los botones en una ventana de mensaje. Puede especificar los parmetros siguientes (se permiten un mximo de tres): *OK, *CANCEL, *RETRY, *ABORT, *IGNORE, *ENTER, *NOBUTTON, *YESBUTTON. CLTPGM(nombre programa) La palabra clave CLTPGM especifica el nombre del programa local llamado por el programa de VARPG, mediante la operacin CALLP. DLL(nombre) La palabra clave DLL, junto con la palabra clave LINKAGE, se utiliza para crear el prototipo de un procedimiento que llama a funciones contenidas en bibliotecas DLL de Windows, incluyendo las API de Windows. LINKAGE(tipo_enlace) Utilice la palabra clave LINKAGE con el parmetro *SERVER para especificar que el nombre de programa utilizado con el cdigo de operacin CALL se encuentra en un servidor AS/400. Las palabras clave LINKAGE y DLL pueden utilizarse juntas para crear el prototipo de un
593
procedimiento que llama a funciones contenidas en bibliotecas DLL de Windows, incluyendo las API de Windows. MSGDATA(msgdata1:msgdata2...) Utilice la palabra clave MSGDATA para definir el texto de substitucin. Los parmetros (msgdata1:msgdata2...) son nombres de campo. VisualAge RPG convierte todos los datos a formato de carcter antes de visualizar el mensaje. MSGNBR(*MSGnnnn o nombrecampo) La palabra clave MSGNBR define el nmero de mensaje. El nmero de mensaje puede tener una longitud mxima de 4 dgitos. MSGTEXT(texto del mensaje) La palabra clave MSGTEXT define el texto del mensaje. El texto del mensaje va entre comillas simples (). MSGTITLE(texto del ttulo) La palabra clave MSGTITLE especifica el texto del ttulo de la ventana de mensaje. Puede entrar una serie o nmero de mensaje que vaya entre comillas simples (). NOWAIT La palabra clave NOWAIT se utiliza para llamar a los programas de AS/400 remotos que utilizan archivos de pantalla. STYLE(tipo_estilo) La palabra clave STYLE se utiliza para la ventana de mensaje para definir el icono que aparece en la ventana de mensaje. Puede especificar uno de los parmetros siguientes con la palabra clave STYLE: *INFO *WARN o *HALT. Para obtener una descripcin del soporte de palabras clave para las especificaciones de definicin de VisualAge RPG, consulte el apartado Palabras clave de especificacin de definicin en la pgina 237.
Especificaciones de entrada
Para obtener informacin ms detallada sobre las especificaciones de descripcin de archivo de VisualAge RPG, consulte el Captulo 17. Especificaciones de descripcin de archivo en la pgina 213. Las siguientes entradas no estn soportadas: v Para la secuencia (posiciones 17-18), no puede entrar un nmero de dos dgitos. ILE RPG da soporte a esta opcin que se puede utilizar para comprobar la secuencia de los registros de entrada. VisualAge RPG no ofrece este soporte. v En cuanto al nmero (posicin 19), no puede entrar el 1 (que indica que slo puede haber un registro de este tipo dentro del grupo ordenado) o N (que indica que puede haber uno o ms registros de este tipo dentro del grupo ordenado). v Por lo que respecta a la opcin (posicin 20), no puede entrar el O (que indica que el tipo de registro es opcional si se especifica la comprobacin de secuencia). v En cuanto al componente cdigo (posiciones 29, 37, 45), no puede entrar la Z (que indicar la parte de zona de un carcter).
Funciones incorporadas
%GETATR y %SETATR son funciones incorporadas especficas de VARPG. Para obtener ms informacin, consulte los apartados %GETATR (Recuperar atributo) en la pgina 327 y %SETATR (Establecer atributo) en la pgina 337.
594
Nota: Las funciones incorporadas especficas de VARPG no dan soporte a valores de 1 byte, de 8 bytes ni UNICODE.
Cdigos de operacin
En este apartado se comparan los cdigos de operacin de ILE RPG con los cdigos de operacin de VisualAge RPG. Para obtener una descripcin completa de los cdigos de operacin de VisualAge RPG, consulte el apartado Los detalles de los cdigos de operacin en la pgina 392.
595
v v v v
GETATR/SETATR (Recuperar atributo, Establecer atributo) READS (Leer seleccionados) SHOWWIN (Cargar una ventana) START/STOP (Iniciar un componente, Parar un componente)
Para obtener una descripcin detallada de estos cdigos de operacin, consulte el apartado Los detalles de los cdigos de operacin en la pgina 392. Nota: Excepto DSPLY, los cdigos de operacin especficos de VARPG no dan soporte a valores enteros de 1 y 8 bytes con y sin signo ni a valores UNICODE.
596
Glosario
Este glosario incluye trminos y definiciones de: v El American National Dictionary for Information Systems ANSI X3.172-1990, copyright 1990 del American National Standards Institute (ANSI). Si desea adquirir una copia de esta publicacin, debe dirigirse a American National Standards Institute, 1430 Broadway, New York, New York, 10018. Las definiciones se especifican mediante el smbolo (A) despus de las mismas. v El Information Technology Vocabulary desarrollado por el Subcomit 1, Comit Tcnico Conjunto 1, de International Organization for Standardization y el International Electrotechnical Committee (ISO/IEC JTC1/SC1). Las definiciones de las partes publicadas de este vocabulario se identifican mediante el smbolo (|) despus de las mismas; las definiciones tomadas de borradores de estndares internacionales, borradores del comit y trabajos no concluyentes desarrollados por ISO/IEC JTC1/SC1 se identifican mediante el smbolo (T) despus de las mismas, lo cual indica que an no se ha alcanzado un acuerdo definitivo entre los Organismos Nacionales integrantes del SC1. v IBM Dictionary of Computing, New York: McGraw-Hill, 1994. v Object-Oriented Interface Design IBM Common User Interface Guidelines, SC34-4399-00, Carmel, IN: Que Corporation, 1992.
A
accin. (1) Sinnimo de subrutina de accin. (2) Programa ejecutable o archivo de mandatos utilizado para manipular los componentes de un proyecto o participar en una construccin. accin por omisin. Accin que se efecta cuando se realiza otra como, por ejemplo, pulsar la tecla Intro. alias de servidor. Nombre al que da una definicin y que puede utilizarse en lugar del nombre del servidor. ancla. Cualquier componente que utiliza como punto de referencia para alinear, dimensionar y espaciar otros componentes. anotaciones de error. Realiza un seguimiento de los errores en las anotaciones de error. El editor le lleva al lugar del cdigo fuente en el que se ha producido el error. API. Interfaz de programacin de aplicaciones. aplicacin. Un grupo de componentes de software utilizados para efectuar tareas de usuario especficas en un sistema. applet. Programa escrito en Java que se ejecuta dentro de un navegador compatible con Java o AppletViewer. archivo. Grupo de datos relacionados que se almacena y se recupera mediante un nombre asignado. Un archivo puede incluir informacin que inicia un programa (objeto de archivo de programa), contiene texto o grficos (objeto de archivo de datos) o procesa una serie de mandatos (archivo por lotes). archivo de mensajes. Archivo que contiene mensajes de aplicacin. Este archivo se crea a partir del archivo fuente de mensajes durante el proceso de construccin. Vase tambin construir. archivo de ondas. Archivo utilizado para sonidos audio en un dispositivo de forma de onda. archivo de Recurso de Presentacin de Informacin (IPF). Archivo en el que se almacena el fuente de la ayuda de la aplicacin. archivo MIDI. Archivo de la Interfaz Digital de Instrumentos Musicales.
597
archivos JAR (.jar). En Java, abreviatura de Java ARchive. Es un formato de archivo que se utiliza para agregar varios archivos en uno. rea comn. rea de almacenamiento proporcionada por el sistema para retener datos temporalmente. Los datos del rea comn estn disponibles para otras aplicaciones. rea de cliente. La parte de la ventana que es el espacio de trabajo del usuario donde ste teclea informacin y selecciona opciones de campos de seleccin. En ventanas primarias, el rea en la que un programador de aplicaciones presenta los objetos con los que trabaja el usuario. rea de informacin. Componente de una ventana en el que se visualiza informacin sobre el objeto o la opcin en los que se encuentra el cursor. El rea de informacin tambin puede incluir un mensaje sobre la conclusin normal de un proceso. Vase tambin barra de estado. rea de trabajo. rea utilizada para organizar objetos de acuerdo a las tareas del usuario. Cuando un usuario cierra un rea de trabajo, todas las ventanas abiertas a partir de objetos contenidos en el rea de trabajo se eliminan del lugar de trabajo. Arquitectura Common User Access (arquitectura CUA). Directrices para el dilogo entre una persona y una estacin de trabajo o un terminal. arquitectura CUA. Arquitectura de Acceso Comn de Usuario. arrastrar. Mover o copiar un objeto utilizando el ratn. Por ejemplo, un usuario puede arrastrar el borde de una ventana para hacerla ms grande pulsando un botn del ratn y mantenindolo pulsado mientras mueve el ratn. Vase tambin arrastrar y soltar. arrastrar y soltar. Manipular directamente un objeto movindolo y colocndolo en cualquier lugar utilizando el ratn. ASCII (American National Standard Code for Information Interchange). Cdigo estndar, que se compone de un juego de caracteres codificados de 7 bits (8 bits incluyendo comprobacin de paridad), que se utiliza para el intercambio de informacin entre sistemas de proceso de datos, sistemas de comunicacin de datos y equipo asociado. El juego de caracteres ASCII se compone de caracteres de control y caracteres grficos. (A) atenuado. Atenuacin del contraste visual de un componente que indica que el usuario no puede seleccionar ni manipular directamente ese componente.
B
barra de desplazamiento. Componente que muestra a un usuario que hay ms informacin disponible en una direccin determinada y que puede moverse para visualizar dicha informacin utilizando el ratn o las teclas de pgina. barra de estado. Componente de una ventana que visualiza informacin que indica el estado de la vista o del objeto actuales. Vase tambin rea de informacin. barra de herramientas. Men que contiene una o ms opciones grficas que representa las acciones que un usuario puede efectuar utilizando el ratn. barra de ttulos. rea en la parte superior de cada ventana que contiene el smbolo del men del sistema. base de datos. (1) Grupo de datos con una estructura determinada para aceptar, almacenar y proporcionar, previa peticin, datos para varios usuarios. (T) (2) Todos los archivos de datos almacenados en el sistema. Biblioteca de enlace dinmico (DLL). Archivo que contiene cdigo ejecutable y datos enlazados de manera lgica a un programa durante el tiempo de carga o el de ejecucin, en lugar de durante el enlace. Varias aplicaciones pueden compartir a la vez el cdigo y los datos de una biblioteca de enlace dinmico. BMP. Extensin de archivo de un archivo bitmap. borde de dimensionamiento. Borde de un marco alrededor de un componente (o conjunto de componentes) que selecciona para cambiar el tamao del componente (o del conjunto de componentes) utilizando el ratn o el teclado.
598
borde de seleccin. Borde visual que aparece alrededor de un componente de VARPG o de un componente creado por el usuario, que permite moverlo mediante el ratn o el teclado. botn. (1) Mecanismo en un dispositivo de puntero, como un ratn, utilizado para solicitar o iniciar una accin. (2) Mecanismo grfico en una ventana que, cuando se selecciona, produce una accin. Por ejemplo, el pulsador Aceptar que, al seleccionarse, inicia una accin. botn 2 del ratn. Por omisin, el botn derecho del ratn se utiliza para manipular. botn 1 del ratn. Por omisin, el botn izquierdo del ratn se utiliza para seleccionar. botn de manipulacin. Vase botn de ratn. botn de maximizar. Botn en la parte ms a la derecha de una barra de ttulo sobre el que un usuario pulsa el botn del ratn para aumentar el tamao de la ventana lo mximo posible. Comprese con botn de minimizar y botn de ocultar. botn de minimizar. Botn ubicado junto al botn ms a la derecha en una barra de ttulo que reduce el tamao de la ventana lo mximo posible. Comprese con botn de maximizar y botn de ocultar. botn de ocultar. Botn en una barra de ttulo sobre el que un usuario pulsa el botn del ratn para suprimir una ventana del lugar de trabajo sin cerrarla. Cuando la ventana est oculta, el estado de la misma, indicado en la lista de ventanas, cambia. Comprese con botn de maximizar y botn de minimizar. botn de ratn. Mecanismo en un ratn para seleccionar opciones, iniciar acciones o manipular objetos con el puntero. Vase tambin botn 1 del ratn y botn 2 del ratn. botn de restaurar. Botn que aparece en la esquina ms a la derecha de la barra de ttulo despus de haber maximizado una ventana. Cuando se selecciona el botn de restaurar, la ventana vuelve a tener el tamao y la posicin que tena antes de que se maximizara. Vase tambin botn de maximizar. botn de seleccin. Vase botn 1 del ratn.
C
campo. (1) rea identificable en una ventana, como un campo de entrada, en la que un usuario escribe texto. (2) Grupo de bytes relacionados, como un nombre o una cantidad, que se trata como una unidad en un registro. campo de referencia. Campo de la base de datos de AS/400 cuyas caractersticas un componente campo de entrada puede heredar. campo de subarchivo. Campo utilizado para definir campos en un componente subarchivo. Vase tambin campo subarchivo. Capa de Sockets Segura (SSL). Esquema de seguridad de gran aceptacin desarrollado por Netscape Communications Corp. y RSA Data Security, Inc. SSL permite al cliente autenticarse en el servidor y cifrar todos los datos y peticiones. El URL de un servidor seguro protegido mediante SSL empieza por https en lugar de http. carpeta destino. Objeto en el que se coloca el icono que representa una aplicacin VARPG. catlogo de componentes. Espacio de almacenamiento para todos los componentes utilizados para crear interfaces grficas de usuario para aplicaciones VARPG. cliente. (1) Sistema que depende de un servidor para obtener datos. (2) La PWS donde se ejecutan las aplicaciones VARPG. Vase tambin cliente DDE. cliente DDE. Aplicacin que inicia una conversacin DDE. Comprese con servidor DDE. Vase tambin componente cliente DDE y conversacin DDE. cliente/servidor. Modelo de interaccin en el proceso de datos distribuidos en el que un programa en una ubicacin enva una peticin a un programa en otra ubicacin y espera una respuesta. El programa que efecta la peticin recibe el nombre de cliente; y el programa que responde, servidor. Vase tambin cliente, servidor, cliente DDE, servidor DDE.
Glosario
599
compilar. Convertir un programa fuente en un programa ejecutable (programa objeto). complemento. Funcin creada por el usuario o un proveedor externo que se puede utilizar en los programas VARPG. componente barra de desplazamiento horizontal. Componente que aade una barra de desplazamiento horizontal a una ventana. Este componente permite desplazarse por un panel de informacin de izquierda a derecha o viceversa. componente barra de desplazamiento vertical. Componente que aade una barra de desplazamiento vertical a una ventana. Este componente permite desplazarse por un panel de informacin verticalmente. componente barra de estado. Componente de una ventana que puede visualizar informacin adicional sobre un proceso o accin de la ventana. componente barra de mens. rea que est junto a la parte superior de la ventana, debajo de la barra de ttulo y encima del resto de la ventana, que contiene opciones que proporcionan acceso a otros mens. En VisualAge RPG, se seala y pulsa un componente barra de mens de la paleta de componentes o del catlogo de componentes y se suelta en una ventana de diseo. componente barra de progreso. Componente que se puede utilizar para indicar el progreso de un proceso como, por ejemplo, copiar archivos, cargar una base de datos, etc. de forma grfica. componente bean Java. Componente que permite a las aplicaciones VARPG acceder a los JavaBean de Sun Microsystems. componente botn de seleccin. Crculo con texto al lado. Los botones de seleccin se combinan para mostrar a un usuario un conjunto fijo de opciones de entre las que slo puede seleccionarse una. Cuando se selecciona una opcin, el crculo se rellena parcialmente. Puede sealar y pulsar un componente botn de seleccin de la paleta de componentes o del catlogo de componentes y soltarlo en una ventana de diseo. componente calendario. Componente que aade un calendario que puede ser modificado por el usuario para incluir texto, color u otros atributos. componente campo de entrada. rea de una pantalla donde un usuario pueden entrar informacin, a menos de que el campo sea de slo lectura. Normalmente, los lmites de un campo de entrada estn indicados. En VisualAge RPG, se seala y pulsa un componente campo de entrada de la paleta de componentes o del catlogo de componentes y se suelta en una ventana de diseo. componente cliente DDE. Componente utilizado para intercambiar datos con otras aplicaciones como, por ejemplo, aplicaciones de hoja de clculo, que soportan el protocolo de intercambio de datos dinmico (DDE). componente *componente lgico. Componente que es la representacin de componente del componente lgico. Para cada componente lgico se crea un componente *componente lgico, que no se visualiza. componente contenedor. Componente que almacena registros relacionados y los visualiza en una vista de detalles, de icono o de rbol. componente control de animacin. Componente que permite reproducir archivos de vdeo, con la extensin AVI, en Windows, o reproducir secuencias GIF de animacin en aplicaciones Java. componente cuaderno. Representacin grfica de un cuaderno. Puede aadir pginas de cuaderno al componente cuaderno y agrupar las pginas en secciones separadas por separadores. En Windows, a veces se ha referencia al cuaderno como el control de separadores de Windows. Vase tambin componente pgina de cuaderno y componente pgina de cuaderno con lienzo. componente de activeX. Componente que aade objetos de control ActiveX al proyecto. Las aplicaciones VARPG pueden acceder as a los atributos y supervisar si hay eventos. componente definido por el usuario. Componente, que se compone de uno o ms componentes que ha personalizado, que guarda en la paleta de componentes o del catlogo de componentes para volver a utilizarlo. Cuando est en la paleta o en el catlogo, este componente se puede sealar y pulsar en la ventana de diseo tal como se hara con otro componente de VARPG.
600
componente destino. Componente que, siempre que cambia el estado del componente fuente, recibe un evento link (de enlace) del componente fuente. componente de subarchivo. Componente utilizado para visualizar una lista de registros que constan de varios campos. Este componente es similar a un subarchivo de AS/400. Vase tambin campo de subarchivo. componente edicin de mltiples lneas (MLE). Componente que representa un campo de entrada que permite al usuario entrar varias lneas de texto. componente elemento de men. Componente que es un elemento grfico o de texto en un men. Cuando el usuario desea trabajar con un objeto, selecciona un elemento de men. componente fuente. Componente que, siempre que cambia su estado, puede notificarlo a los componentes de destino. Un componente fuente puede tener varios destinos. componente graduador. Componente visual de una interfaz de usuario que representa una cantidad y su relacin con el rango de posibles valores para esa cantidad. El usuario tambin puede modificar el valor de la cantidad. Puede sealar y pulsar un componente graduador de la paleta de componentes o del catlogo de componentes y soltarlo en una ventana de diseo. componente grfica. Componente que permite al usuario aadir un grfico a la GUI. Los estilos de grfico disponibles son el diagrama de lneas, de barras, de lneas y barras y circular. componente imagen. Componente utilizado para visualizar una imagen, de un archivo BMP o ICO, en una ventana. componente lienzo. Componente en el que puede sealar y pulsar otros componentes, colocarlos y organizarlos para producir una interfaz grfica de usuario. El componente lienzo ocupa el rea de cliente de un componente ventana o de un componente pgina de cuaderno. Vase tambin componente pgina de cuaderno con lienzo y componente ventana con lienzo. componente lgico. Agrupacin funcional de archivos relacionados dentro de un objeto. Un componente lgico se crea cuando las especificaciones de control no contienen palabras clave NOMAIN y EXE. componente lgico compartido. Componente lgico al que puede accederse a travs de ms de un objeto. componente medios. Componente que proporciona a un programa la posibilidad de procesar archivos de sonido (.WAV) y archivos de vdeo (.MID). componente men emergente. Componente que, cuando se aade a un objeto en la interfaz, aparece junto al objeto con el que est asociado cuando se solicita. Puede sealar y pulsar un componente men emergente de la paleta de componentes o del catlogo de componentes y soltarlo en una ventana de diseo. componente odbc/jdbc. Componente que permite a las aplicaciones VAPRG acceder y procesar archivos de base de datos que den soporte a la API ODBC de Windows o la API JDBC de Sun Microsystem. componente pgina de cuaderno. Componente utilizado para aadir pginas al componente cuaderno. Vase tambin cuaderno. componente pgina de cuaderno con lienzo. Combinacin del componente cuaderno y del componente pgina con lienzo. Vase tambin cuaderno y componente lienzo. componente panel de medios. Componente utilizado para proporcionar al usuario control sobre otros componentes. Por ejemplo, un componente panel de medios puede utilizarse para controlar el volumen de un componente medios. componente pulsador. Botn etiquetado con texto que representa una accin que se inicia cuando un usuario selecciona el pulsador. Puede sealar y pulsar un componente pulsador de la paleta de componentes o del catlogo de componentes y soltarlo en una ventana de diseo. Vase tambin componente pulsador grfico. componente pulsador grfico. Pulsador, etiquetado con un grfico, que representa una accin que se inicia cuando un usuario la selecciona. Comprese con componente pulsador. componente recuadro de contorno. Componente que es un recuadro rectangular colocado alrededor de un grupo de componentes para indicar que todos los componentes estn relacionados.
Glosario
601
componente recuadro de grupo. Marco rectangular alrededor de un grupo de controles que indica que estn relacionados y que proporciona una etiqueta optativa para el grupo. En VisualAge RPG, se seala y pulsa un componente recuadro de grupo de la paleta de componentes o del catlogo de componentes y se suelta en una ventana de diseo. componente recuadro de lista. Control que contiene opciones desplazables que un usuario puede seleccionar. En VisualAge RPG, se seala y pulsa un componente recuadro de lista de la paleta de componentes o del catlogo de componentes y se suelta en una ventana de diseo. componente recuadro de seleccin. Recuadro de seleccin con texto asociado que representa una opcin. Cuando un usuario selecciona una opcin, aparece un indicador en el recuadro de seleccin que indica que la opcin est seleccionada. El usuario puede eliminar la marca del recuadro de seleccin volviendo a seleccionar la opcin. En VisualAge RPG, se seala y pulsa un componente recuadro de seleccin de la paleta de componentes o del catlogo de componentes y se suelta en una ventana de diseo. componente referencia a componente lgico. Componente que permite que un componente lgico se comunique con otro en una aplicacin VARPG. componentes. Objetos que componen la GUI de una aplicacin VARPG. componente selector cclico. Tipo de campo de entrada que muestra un anillo de opciones relacionadas, pero que se excluyen mutuamente, por el que un usuario puede desplazarse y seleccionar una opcin. El usuario tambin puede teclear una opcin vlida en el campo de entrada. Puede sealar y pulsar un componente selector cclico de la paleta de componentes o del catlogo de componentes y soltarlo en una ventana de diseo. componente subarchivo de mensajes. Componente que puede visualizar mensajes predefinidos o texto suministrado en la lgica del programa. componente submen. Componente utilizado para iniciar un submen a partir de un elemento de men o de un men existente, o para iniciar un men desplegable a partir de un elemento de men en una barra de men. Vase tambin submen y componente elemento de men. componente temporizador. Componente utilizado para hacer un seguimiento del intervalo de tiempo entre dos eventos y activar el segundo evento cuando ha transcurrido el intervalo. componente texto esttico. Componente utilizado como etiqueta para otros componentes, como solicitud para un componente campo de entrada. componente ventana. rea con lmites visibles que representa una vista de un objeto o con la que un usuario mantiene un dilogo con un sistema. Puede sealar y pulsar un componente ventana de la paleta de componentes o del catlogo de componentes y soltarlo en la ventana de proyectos. componente ventana con lienzo. Combinacin del componente ventana y del componente lienzo. Vase tambin componente ventana y componente lienzo. comprobacin de sintaxis. Verifica que la sintaxis de cada lnea sea correcta mientras se edita el cdigo fuente. Con ello pueden evitarse errores de compilacin. Esta opcin puede activarse o desactivarse. Puede visualizarse slo determinados tipos de especificacin, como especificaciones C, o una lnea con una serie especfica. Conectividad de Base de Datos Java (JDBC). Estndar del sector para la conectividad independiente de la base de datos entre Java y una amplia gama de bases de datos. JDBC proporciona una interfaz de programacin de aplicaciones (API) a nivel de llamada para el acceso a bases de datos basado en SQL. CONFIG.SYS. Archivo de configuracin, ubicado en el directorio raz de la unidad de arranque, para los sistemas operativos DOS, OS/2 o Windows. Contiene informacin necesaria para instalar y ejecutar hardware y software. configuracin. Manera en que el hardware y el software de un sistema de proceso de informacin estn organizados y se conectan entre s (T). construir. Proceso por el que las diversas partes de un cdigo fuente que forman los componentes lgicos de una aplicacin VARPG se compilan y enlazan para producir una versin ejecutable de la aplicacin. conversacin DDE. El intercambio de datos entre un cliente DDE y un servidor DDE. Vase tambin conversacin de enlace esttico y conversacin de enlace dinmico.
602
conversacin de enlace dinmico. En DDE, actualizacin automtica de un programa cliente por un programa servidor cuando los datos cambian en el servidor. Comprese con conversacin de enlace esttico conversacin de enlace esttico. En DDE, peticin explcita efectuada por un programa cliente a un programa servidor. El programa servidor responde a la peticin. Comprese con conversacin de enlace dinmico. cuaderno de propiedades. Representacin grfica que se asemeja a un cuaderno enlazado que contiene pginas separadas en secciones por pginas separadoras. Seleccione los separadores de un cuaderno para ir de una seccin a otra. cursor. Indicacin visible de la posicin en la que aparecer la interaccin de usuario con el teclado.
D
DBCS. Juego de caracteres de doble byte. DDE. Intercambio de datos dinmico. definicin de interfaz de procedimiento. Repeticin de la informacin prototipo dentro de la definicin de un procedimiento. Se utiliza para declarar los parmetros de entrada para el procedimiento y para garantizar que la definicin interna del procedimiento es coherente con la definicin externa (el prototipo) directorio destino. Directorio en el que la aplicacin VARPG compilada se almacena despus de una creacin. Comprese con carpeta destino. directorio fuente. Directorio en el que se almacenan todos los archivos fuente para una aplicacin VARPG. Diseador GUI. Conjunto de herramientas utilizadas para crear interfaces arrastrando y soltando componentes de la paleta de componentes a la ventana de diseo. DLL. Biblioteca de enlace dinmico. DLL de programa de utilidad. Vase mdulo NOMAIN doble pulsacin. Pulsar un botn dos veces rpidamente.
E
EBCDIC. Cdigo de intercambio decimal binario ampliado. Juego de caracteres de 256 caracteres de 8 bits. edicin directa. Utilizacin de procedimientos que permiten a un usuario trabajar con un objeto arrastrndolo con un ratn o interactuando con su men emergente. elemento. En intercambio de datos dinmico, una unidad de datos. Por ejemplo, la posicin de la casilla superior izquierda en una hoja de clculo es fila 1, columna 1. Se puede hacer referencia a la posicin de la casilla como el elemento R1C1. eliminar referencia. Accin de suprimir la asociacin entre un componente y un campo de base de datos de AS/400. nfasis. Resaltado del cambio de color u otra indicacin visible de condiciones relativas a un objeto o una opcin que afecta a la capacidad del usuario de interactuar con ese objeto u opcin. El nfasis tambin puede proporcionar a un usuario informacin adicional sobre el estado de una opcin o un objeto. entrada/salida (E/S). Datos proporcionados al sistema o datos que resultan del proceso del sistema. estacin de trabajo. Dispositivo que permite a un usuario efectuar trabajos. Vase tambin estacin de trabajo programable. estacin de trabajo programable (PWS). Estacin de trabajo que tiene posibilidades de proceso y que permite a un usuario modificar sus funciones.
Glosario
603
evento. Seal generada como resultado de una modificacin en el estado de un componente. Por ejemplo, al accionar un pulsador se genera el evento Press. evento de enlace. Evento que un componente destino recibe siempre que cambia el estado de un componente fuente. excepcin. (1) En lenguajes de programacin, una situacin anormal que se da durante la ejecucin, que puede ocasionar una desviacin de la secuencia normal de ejecucin, para la que existen recursos en los lenguajes de programacin a fin de definirla, activarla, reconocerla, ignorarla y manejarla. (I) (2) En VisualAge RPG, un evento o situacin que impide, o puede impedir, que una accin solicitada por un usuario concluya tal como ste espera. Las excepciones tienen lugar cuando un producto no puede interpretar la entrada de un usuario. EXE. Extensin de un archivo ejecutable. exportar. Funcin que convierte un archivo interno en un formato de archivo estndar para utilizarlo fuera de la aplicacin. Comprese con importar.
F
foco. Sinnimo de foco de entrada. foco de entrada. rea de una ventana en la que la interaccin del usuario puede tener lugar desde el teclado o desde el ratn.
I
ICO. Extensin de archivo de un archivo de icono. icono. Representacin grfica de un objeto, que se compone de una imagen, un fondo de imagen y una etiqueta. importar. Funcin que convierte objetos de archivo de pantalla de AS/400 al componente VARPG adecuado. Comprese con exportar. indicador de progreso. Uno o ms controles utilizados para informar a un usuario sobre el curso de un proceso. ndice. Identificador de una entrada en componentes de VARPG como recuadros de lista o recuadros de combinacin. INI. Extensin de archivo para un archivo del sistema operativo OS/2 o Windows que contiene informacin especfica de la aplicacin que necesita conservarse de una llamada de una aplicacin a otra. intercambio de datos dinmicos (DDE). Intercambio de datos entre programas o entre un programa y un objeto de archivo de datos. Cualquier cambio efectuado en la informacin de un programa o una sesin se aplica a los datos idnticos creados por el otro programa. Vase tambin conversacin DDE, cliente DDE y servidor DDE. interfaz de programacin de aplicaciones (API). Interfaz funcional suministrada por el sistema operativo o un programa bajo licencia que se solicita por separado, que permite que un programa de aplicacin escrito en un lenguaje de alto nivel pueda utilizar datos o funciones especficas del sistema operativo o del programa bajo licencia. interfaz de usuario grfica (GUI). Tipo de interfaz de usuario que proporciona las ventajas de los grficos de alta resolucin. Una interfaz grfica de usuario incluye una combinacin de grficos, el paradigma de accin de objeto, el uso de dispositivos de puntero, barras de men y otros mens, solapamiento de ventanas e iconos. Interfaz Nativa de Java (JNI). Interfaz de programacin que permite al cdigo Java que se ejecuta dentro de una Mquina Virtual Java (JVM) interoperar con las funciones escritas en otros lenguajes de programacin. IPF. Recurso de Presentacin de Informacin.
J
Java. Lenguaje de programacin orientado a objeto para cdigo interpretado porttil que soporta la interaccin entre objetos remotos. Java y sus especificaciones han sido desarrolladas por Sun Microsystems, Incorporated.
604
JavaBeans. En Java, un modelo de componente reutilizable, porttil e independiente de la plataforma. Java Runtime Environment (JRE). Subconjunto del Kit de desarrollo Java para los usuarios finales y desarrolladores que deseen redistribuir el JRE. El JRE consiste en la Mquina Virtual Java, las Clases de Ncleo de Java y los archivos de soporte. Java 2 Software Development Kit (J2SDK). Software que distribuye Sun Microsystems a los desarrolladores de Java. Este software incluye el intrprete Java, clases Java y herramientas de desarrollo Java. Las herramientas de desarrollo incluyen un compilador, un depurador, un desensamblador, un AppletViewer, un generador de archivos de apndice y un generador de documentacin. juego de caracteres de doble byte (DBCS). Juego de caracteres en el que cada carcter se representa mediante 2 bytes. Algunos idiomas como el japons, el chino o el coreano, que contienen ms smbolos de los que pueden representarse mediante los 256 puntos de cdigo, necesitan el juego de caracteres de doble byte. Puesto que cada carcter necesita 2 bytes, la escritura, la visualizacin y la impresin de caracteres DBCS necesita hardware y programas que soporten DBCS. El sistema soporta cuatro juegos de caracteres de doble byte: japons, coreano, chino simplificado y chino tradicional. Comprese con juego de caracteres de un solo byte (SBCS). juego de caracteres de un solo byte (SBCS). Juego de caracteres en el que cada carcter se representa mediante un byte. Comprese con juego de caracteres de doble byte (DBCS).
L
lnea de ejecucin. La unidad ms pequea de operacin que puede efectuarse dentro de un proceso. lista desplegable. Campo de una sola seleccin en el que slo puede verse la opcin actual. Las dems opciones permanecen ocultas hasta que el usuario realiza una accin especfica para visualiza el recuadro de lista que las contiene. lugar de trabajo. rea que ocupa toda la pantalla y contiene todos los objetos que componen la interfaz del usuario.
M
Mquina Virtual Java (JVM). La parte del Java Runtime Environment (JRE) responsable de interpretar bytecodes de Java. marcador de grupo. Marcador que identifica un componente como el primero de un grupo. Cuando el usuario desplaza el cursor por un grupo de componentes y llega al ltimo, el cursor vuelve a la primera parte del grupo. mensaje. (1) Informacin no solicitada por un usuario pero visualizada por un producto como respuesta a un evento no esperado o cuando se produce algo no deseado. (2) Comunicacin enviada por una persona o un programa a otra persona u otro programa. men. Lista de opciones que pueden aplicarse a un objeto. Un men puede contener opciones que no estn disponibles para ser seleccionadas en determinados contextos. Estas opciones estn atenuadas. men desplegable. Men que aparece al seleccionar una opcin en una barra de men o a partir del smbolo del men del sistema. Las opciones de un men desplegable estn relacionadas entre s. men emergente. Men que, cuando se solicita, aparece junto al objeto con el que est asociado. Contiene opciones adecuadas para el objeto en su contexto actual. MID. Extensin de archivo de un archivo MIDI. migrar. (1) Mover a un sistema operativo modificado, generalmente a un nuevo release o versin de un sistema. (2) Mover datos desde una jerarqua de almacenamiento a otra. mdulo EXE. Un mdulo EXE consta de un procedimiento principal y subprocedimientos. Se crea cuando la palabra clave EXE est presente en la especificacin de control. Todas las subrutinas (BEGSR) deben ser locales a un procedimiento. El EXE debe contener un procedimiento cuyo nombre coincida con el nombre del archivo fuente. Este ser el punto de entrada principal para el EXE; es decir, el procedimiento principal.
Glosario
605
mdulo NOMAIN. Mdulo que contiene solamente subprocedimientos. No contiene ninguna accin o subrutina de usuario autnoma. Un mdulo NOMAIN se crea cuando la palabra clave NOMAIN se encuentra en la especificacin de control.
N
nemotcnico. Un solo carcter, dentro del texto de una opcin, identificado por un subrayado debajo de l. Vase tambin seleccin nemotcnica. nivel del graduador. Indicador visual en el graduador que un usuario puede mover para modificar el valor numrico.
O
objeto. (1) Espacio de almacenamiento con nombre que consiste en un conjunto de caractersticas que describen el espacio de almacenamiento en s y, en algunos casos, datos. Un objeto es algo que existe en el almacenamiento y ocupa parte de su espacio, y en el que se pueden efectuar operaciones. Algunos ejemplos de objetos son: programas, archivos, bibliotecas y carpetas. (2) Componente visual de una interfaz de usuario con el que un usuario puede efectuar una tarea. Un objeto puede aparecer como texto o como un icono. objeto de datos. Objeto que transporta informacin, como texto, grficos, audio o vdeo.
P
paleta de colores. Conjunto de colores que puede utilizarse para cambiar el color de cualquier componente en la GUI de la aplicacin. paleta de componentes. El grupo de componentes ms adecuado para construir la interfaz grfica de usuario actual para una aplicacin. Cuando finaliza la GUI, puede vaciar la paleta y aadir los componentes del catlogo de componentes que necesite para la siguiente aplicacin. paleta de fonts. Conjunto de fonts que puede utilizarse para cambiar el font de un componente en la GUI de la aplicacin. panel de navegacin. Grupo de botones que se pueden utilizar para controlar la seleccin visible de registros en un subarchivo. paquete. Funcin utilizada para reunir todos los componentes de una aplicacin VARPG para su distribucin. paradigma accin-objeto. Patrn de interaccin en el que un usuario selecciona un objeto y a continuacin selecciona una accin para aplicarla a ese objeto. procedimiento. Un procedimiento es cualquier parte del cdigo a la que pueda llamarse mediante la operacin CALLP. procedimiento principal. Un procedimiento principal es un subprocedimiento que puede especificarse como procedimiento de entrada del programa y que recibe el control cuando se le llama por primera vez. El procedimiento principal slo se genera cuando se crea un EXE. Consulte mdulo EXE programacin orientada a objetos. Mtodo para estructurar programas como clases organizadas jerrquicamente que describen los datos y las operaciones de objetos que pueden interactuar con otros objetos. (T) programa destino. Objeto que el proyecto ha de crear, como una biblioteca de enlace dinmico (DLL). programa objeto. Programa destino adecuado para ser ejecutado. Un programa objeto puede o no necesitar enlace. (T) prototipo. Definicin de la interfaz de llamada. Incluye informacin como, por ejemplo, si la llamada est enlazada (procedimiento) o es dinmica (programa), el nombre externo, el nmero y la naturaleza de los parmetros, qu parmetros deben ser pasados y el tipo de datos de cualquier valor de retorno (para un procedimiento)
606
proyecto. Conjunto de datos y acciones completo necesarios para construir un destino nico, como una biblioteca de enlace dinmico (DLL) o un archivo ejecutable (EXE). pulsar. Pulsar y liberar un botn del ratn sin mover el puntero fuera de la opcin o del objeto. Vase tambin doble pulsacin. puntero del ratn. Sinnimo de cursor. PWS. Estacin de trabajo programable.
R
ratn. Dispositivo con uno o ms pulsadores que se utilizan para colocar un puntero en la pantalla sin usar el teclado. Se utiliza para seleccionar una opcin o una funcin que se ha de efectuar o para llevar a cabo operaciones en la pantalla, como dibujar lneas y arrastrarlas de una posicin a otra. recuadro de combinacin. Control que combina las funciones de un campo de entrada y de un recuadro de lista. Un recuadro de combinacin contiene una lista de objetos por los que el usuario puede desplazarse y seleccionar para completar el campo de entrada. Si lo desea, el usuario tambin puede escribir texto directamente en el campo de entrada. En VisualAge RPG, se seala y pulsa un componente recuadro de combinacin de la paleta de componentes o del catlogo de componentes y se suelta en una ventana de diseo. recuadro de combinacin desplegable. Tipo de recuadro de combinacin en la que un recuadro de lista est oculto hasta que un usuario realiza una accin especfica para visualizarlo. Recurso de Presentacin de Informacin (IPF). Herramienta utilizada para crear ayuda en lnea en una estacin de trabajo programable. resaltado de smbolos. Mejora la legibilidad del cdigo. Puede configurar el resaltado de diferentes elementos del lenguaje con diferentes colores o fonts para identificar las estructuras del programa. Puede activar o desactivar el resaltado de smbolos.
S
SBCS. Juego de caracteres de un solo byte. seccin fuente principal. En un programa VARPG, la seccin que contiene todas las definiciones globales para un mdulo. Para un componente lgico, esta seccin tambin incluye la accin y las subrutinas de usuario. seleccin nemotcnica. Mtodo de seleccin en el que un usuario selecciona una opcin tecleando el nemotcnico de esa opcin. sealar y pulsar. (1) Mtodo de seleccin que se utiliza para copiar un componente de la paleta o el catlogo de componentes en la ventana de diseo, la vista de iconos o la vista de rbol de la GUI. (2) Para colocar un componente en cualquiera de las vistas, seale y pulse el componente; despus, mueva el cursor a la ventana elegida y seale y suelte el componente donde desea que aparezca. En las vistas de iconos y de rbol, el componente se colocar en el componente padre, y tendr que moverlo al lugar donde le interese que aparezca en la ventana de diseo. servidor. Sistema de una red que maneja las peticiones de otro sistema, llamado cliente. servidor DDE. Aplicacin que proporciona datos a otra aplicacin habilitada por DDE. Comprese con cliente DDE. Vase tambin conversacin DDE. sistema operativo. Grupo de programas del sistema que controlan la operacin general de un sistema. solicitud. (1) Mensaje visual o audible enviado por un programa para solicitar la respuesta de un usuario. (T) (2) Smbolo o mensaje que se visualiza para solicitar una entrada del usuario o proporcionar informacin operativa. El usuario debe responder a la solicitud para poder proseguir. SSL. Capa de Sockets Segura.
Glosario
607
submen. Men que aparece al seleccionar una opcin en cascada en otro men y que contiene opciones relacionadas con dicho men. Los submens se utilizan para reducir la longitud de un men desplegable o de un men emergente. Vase tambin componente submen. subprocedimiento. Procedimiento especificado despus de la seccin fuente principal. Debe tener un prototipo correspondiente en las especificaciones de definicin de la seccin fuente principal. subrutina de accin. Lgica que escribe para responder a un evento especfico.
T
tema. En intercambio de datos dinmico (DDE), el juego de datos que es el sujeto de una conversacin DDE. tope de tabulador. Atributo utilizado para establecer un tope de tabulador para un componente, de modo que los usuarios puedan colocar el foco en el mismo cuando utilicen la tecla tabuladora para moverse por la interfaz.
V
valor por omisin. Valor que el sistema o un programa proporciona o presupone automticamente cuando el usuario no especifica ninguno. El valor por omisin puede asignarse a un pulsador o a un pulsador grfico. ventana activa. Ventana con la que un usuario interacta actualmente. Esta es la ventana que recibe la entrada del teclado. ventana de diseo. Ventana en el diseador GUI en la que se colocan componentes para crear una interfaz de usuario. ventana emergente. Ventana movible, de tamao fijo, en la que un usuario proporciona informacin necesaria para una aplicacin de manera que puede continuar procesando una peticin de usuario. Sinnimo de ventana secundaria. ventana inactiva. Ventana que no puede recibir entrada de teclado en un momento dado. ventana primaria. Ventana en la que tiene lugar la interaccin principal entre el usuario y la aplicacin. Sinnimo de ventana principal. ventana principal. Vase ventana primaria. ventana secundaria. Ventana que contiene informacin que depende de la informacin de una ventana primaria y se utiliza para complementar la interaccin en dicha ventana. Vase tambin ventana primaria. Sinnimo de ventana emergente. vista de rbol. Visualizacin del contenido de un objeto de manera jerrquica. vista de detalles. Vista de contenido estndar en la que un icono pequeo se combina con texto para proporcionar informacin descriptiva sobre un objeto. vista de iconos. Vista de contenido estndar en la que cada objeto contenido en un contenedor se visualiza como un icono.
W
WAV. Extensin de archivo de un archivo de ondas.
608
Bibliografa
Para obtener informacin adicional sobre temas relacionados con VisualAge RPG y CODE (Cooperative Development Environment) para AS/400, consulte las siguientes publicaciones de IBM: Manuales de WebSphere Development Tools para AS/400: *Nota: Se han actualizado todas las versiones en lnea de las publicaciones de WebSphere Development Tools para AS/400. Las publicaciones cuyo nmero de pedido est marcado con un asterisco (*) no se han vuelto a imprimir en este release. v Iniciacin a VisualAge RPG y CODE/400, SC10-3287-01 (SC09-2625-01), proporciona informacin sobre WebSphere Development Tools para AS/400, dando una visin general de las caractersticas de CODE/400 y VARPG, de cmo funcionan juntas y de las ventajas empresariales que se obtienen al utilizarlas. Manuales de VisualAge RPG: v Iniciacin a VisualAge RPG y CODE/400, SC10-3287-01 (SC09-2625-01)*, describe los conceptos y las tareas de VARPG que se realizan mientras se utiliza VisualAge RPG. v VisualAge RPG Manual de consulta del lenguaje, SC10-3066-01 (SC09-2451-01)*, proporciona informacin de consulta sobre el lenguaje y el compilador de VARPG. v VisualAge RPG Manual de consulta de componentes, SC10-3065-02 (SC09-2450-02)*, proporciona una descripcin de cada componente, atributo de componente, evento de componente, atributo de componente y atributo de evento de VARPG. Es un manual de consulta para todos aquellos que desarrollan aplicaciones con VisualAge RPG. v Programacin con VisualAge para RPG, SC10-3067-02 (SC09-2449-02)*, contiene informacin especfica sobre cmo crear aplicaciones con VisualAge RPG. Describe los pasos que debe seguir en cada fase del ciclo de desarrollo de la aplicacin, desde el diseo hasta el empaquetado y la distribucin. Se incluyen ejemplos de programacin para clarificar los conceptos y el proceso de desarrollo de aplicaciones VARPG. v Java for RPG Programmers es una introduccin al lenguaje Java (y RPG IV) mediante la comparacin con el lenguaje RPG. Se trata de un comienzo muy apropiado en el mundo de Java. Tambin incluye una gua de aprendizaje interactiva en formato CD sobre Java y VisualAge para Java, mediante MINDQ. v Experience RPG IV Tutorial es una gua de aprendizaje interactiva en formato CD que ensea RPG IV e ILE, paso a paso y de un modo divertido. Se trata de un manual con preguntas y ejercicios que ayudan a adquirir experiencia prctica con esta nueva y apasionante versin de RPG. v Otra publicacin que no es de IBM interesante para los usuarios de VisualAge RPG es VisualAge for RPG by Example. Informacin y publicaciones del AS/400: v Si tiene acceso a Internet, puede obtener otra informacin y publicaciones del AS/400 en uno de los siguientes sitios Web:
http://www.as400.ibm.com/infocenter http://publib.boulder.ibm.com/pubs/html/as400/infocenter.htm
609
Para obtener una versin en copia software de las publicaciones de AS/400, consulte la publicacin CD-ROM AS/400e Biblioteca en soporte software, SK3T-1325-04 (SK3T-0118-04). Manuales de Gestor para el Desarrollo de Aplicaciones ADM: v ADTS/400: Gestor para el Desarrollo de Aplicaciones ADM Introduccin y gua de planificacion, GC10-9401-00 (GC09-1807-00), describe los conceptos bsicos y la planificacin necesaria para hacer un uso efectivo de la funcin Gestor para el Desarrollo de Aplicaciones ADM. v ADTS/400: Gestor para el Desarrollo de Aplicaciones ADM Gua del Usuario, SC10-9609-01 (SC09-2133-01), describe cmo crear y gestionar proyectos definidos para la funcin Gestor para el Desarrollo de Aplicaciones ADM. v ADTS/400: Gestor para el Desarrollo de Aplicaciones ADM Gua de autoaprendizaje, SC10-9610-00 (SC09-2138-00), proporciona experiencia prctica en la utilizacin de la funcin Gestor para el Desarrollo de Aplicaciones ADM del producto ADTS para OS/400. Esta gua muestra cmo utilizar la caracterstica de Gestor para el Desarrollo de Aplicaciones ADM guindole a travs de una serie de ejercicios paso a paso. v ADTS/400: Application Development Manager API Reference, SC09-2180-00, describe cmo los programadores de aplicaciones pueden escribir su propia interfaz para la funcin Gestor para el Desarrollo de Aplicaciones ADM. Manual Recurso de presentacin de informacin: v Information Presentation Facility Programming Guide G25H-7110, describe los elementos que componen el IPF (Recurso de presentacin de informacin). IPF es una herramienta que soporta el diseo y el desarrollo de documentos en lnea y de recursos de ayuda en lnea. Manuales de SQL: v IBM SQL Reference Version 2 SC26-8416, Volumen 2, compara los recursos de DB2 SQL/DS DB2/400 DB2/6000 IBM SQL ISO-ANSI (SQL92E) X/Open (XPG4-SQL). v DB2 Universal Database Administration Guide S10J-8157, proporciona la informacin necesaria para utilizar y administrar el producto DB2. v DB2 Universal Database Embedded SQL Programming Guide S10J-8158, describe cmo disear y codificar programas de aplicacin para acceder a los servidores de la familia DB2 Client/Server (como DB2 o DB2/400). Contiene informacin detallada sobre la utilizacin del SQL (Lenguaje de Consulta Estructurada) y llamadas API en aplicaciones.
610
Avisos
Esta informacin se ha elaborado para productos y servicios que se ofrecen en Estados Unidos. Es posible que IBM no ofrezca todos los productos, servicios o caractersticas que se tratan en este documento en otros pases. Consulte con el representante local de IBM para obtener informacin sobre los productos y servicios que estn disponibles en su rea en la actualidad. Ninguna referencia hecha en esta publicacin a un producto, programa o servicio de IBM pretende afirmar ni implicar que slo pueda utilizarse dicho producto, programa o servicio de IBM. Puede utilizarse cualquier producto, programa o servicio funcionalmente equivalente y que no infrinja ninguno de los derechos de propiedad intelectual de IBM. Sin embargo, es responsabilidad del usuario evaluar y verificar el funcionamiento de los productos, programas o servicios que no sean de IBM. IBM puede tener patentes o solicitudes de patente pendientes acerca del tema de este documento. La entrega de este documento no le otorga ninguna licencia sobre estas patentes. Puede enviar consultas sobre licencias, por escrito, a: Director of Licensing Intellectual Property & Licensing International Business Machines Corporation North Castle Drive, MD - NC119 Armonk, New York 10504-1785 Estados Unidos El siguiente prrafo no es aplicable en el Reino Unido ni en ningn otro pas donde tales estipulaciones sean contradictorias con la legislacin local: INTERNATIONAL BUSINESS MACHINES CORPORATION PROPORCIONA ESTA PUBLICACIN TAL CUAL, SIN NINGN TIPO DE GARANTA, EXPLCITA O IMPLCITA, INCLUYENDO, PERO SIN LIMITARSE A, LAS GARANTAS IMPLCITAS DE NO VULNERACIN, COMERCIALIZACIN E IDONEIDAD PARA UNA FINALIDAD DETERMINADA. En determinados pases no se permite la declaracin de limitacin de responsabilidad de las garantas expresas ni implcitas en determinadas transacciones, por lo tanto, esta declaracin puede no ser procedente en su caso. Esta informacin puede contener inexactitudes tcnicas o errores tipogrficos. Se efectan cambios peridicos en la informacin contenida en este documento; tales cambios se incorporarn en nuevas ediciones de la publicacin. IBM puede hacer mejoras y/o modificaciones en los productos y/o programas descritos en esta publicacin en cualquier momento sin previo aviso. Las referencias hechas en esta informacin a pginas Web de terceros se proporcionan slo como gentileza para los usuarios y de ninguna manera puede interpretarse que IBM avala esas pginas Web. El material de estas pginas Web no forma parte del material para este producto de IBM y el usuario ser el nico responsable del uso de estas ubicaciones Web. Los poseedores de una licencia de este programa que deseen obtener informacin al respecto con el fin de permitir: (i) el intercambio de informacin entre programas creados de manera independiente y otros programas (incluido ste) y (ii) la utilizacin mutua de la informacin que se ha intercambiado, deben ponerse en contacto con IBM en la siguiente direccin:
611
IBM Canada Ltd. Department 071 1150 Eglinton Avenue East Toronto, Ontario M3C 1H7 Canad Dicha informacin puede estar disponible, sujeta a los trminos y condiciones correspondientes e incluye, en algunos casos, el pago de una cuota. IBM proporciona el programa bajo licencia descrito en esta informacin y todo el material bajo licencia disponible para l segn los trminos del Contrato de Cliente IBM, Contrato de Licencia de Programa Internacional IBM o cualquier contrato equivalente entre IBM y el cliente.
Java y todas las marcas registradas derivadas de Java son marcas registradas de Sun Microsystems, Inc. en Estados Unidos y/u otros pases. ActiveX, Microsoft, Windows y Windows NT son marcas registradas de Microsoft Corporation en Estados Unidos, otros pases o ambos. Otros nombres de compaas, productos y servicios pueden ser marcas registradas o marcas de servicio de terceros.
612
A
ACQ, no soportado en VARPG 595 activar los bits (BITON) 401 actualizacin archivo 215 actualizacin del rea de datos 505 ADD, cdigo de operacin 367, 392 ADDDUR, cdigo de operacin 377, 393 adicin de registros 216, 291, 301 ALIGN 237 ALIGN, palabra clave alineacin de subcampos 148 alineacin campos sin signo 121 alineacin, campos enteros 119 alineacin, campos flotantes 118 almacenamiento automtico 230 almacenamiento esttico 230 ALT 238 ALTSEQ 593 ALWNULL 202 ALLOC (asignar almacenamiento), cdigo de operacin 382 ALLOC, cdigo de operacin 395 mbito de definiciones 62, 228 subrutina *PSSR 65 ampliador de operacin 283 AN 282 AND 291 AND, relacin especificaciones de entrada 271 AND/OR especificaciones de entrada 271 ANDxx, cdigo de operacin 375, 390, 396 aadir duraciones de fecha-hora 378 aadir factores ADD (ADD) 392 ADDDUR (Aadir duracin) 393 archivo actualizacin 215 archivo controlado en clculo 216 archivo DISK 218 archivo PRINTER 218 archivo SPECIAL 218 bloqueo de archivos AS/400 85 clase 215 combinado 215 entrada 215 estados de bloqueo 86 formato 217 matriz 215 salida 215 tabla 215 archivo combinado 215 archivo controlado en clculo clase de archivo 215 descripcin de 216 archivo de impresora descrito por programa 290
613
archivo de impresora (continuacin) espacio y saltar 293 especificaciones de descripcin de archivo 218 especificar nombre de archivo de salida 290 especificar relacin lgica 291 indicadores de salida 294 registros de excepcin 291 reglas 87 restricciones 87 archivo descrito externamente adicin de registros 301 definicin 96 edicin 185 especificaciones de salida para 300 formato de archivo 217 indicador de identificacin de registro 277 indicadores de campo 278 indicadores de salida 301 longitud de registro 217 nombre de campo 301 nombre de campo externo 277 nombre de registro 277 nombre EXCEPT 301 posiciones 17-20 277 posiciones 23-80 277 posiciones 31-48 278 posiciones 63-64 278 posiciones 65-66 278 posiciones 67-68 278 posiciones 7-20 277 posiciones 75-80 279 restauracin de campos 302 tipo 300 tipo de formulario 276 valores de clave 218 archivo descrito por programa *IN, *INxx, *IN(xx) 296 *PLACE 295 adicin/supresin de registros 291 blanco despus 296 carcter 271 cdigos de edicin 296 cdigos de identificacin de registro 269 componente de cdigo 270 constante 298, 299 dgito 271 espacio y saltar 293 especificaciones de salida 290 especificar en especificaciones de salida 290 fecha/hora 298, 299 formato de archivo 217 formato de datos 273 formato de datos de fecha/hora 97 formato de datos numricos 96 formato de fecha/hora externo 272 identificacin de registro 290 indicador de identificacin de registro 269 indicadores 269 indicadores de campo 276 indicadores de salida 294 longitud de registro 217
archivo descrito por programa (continuacin) longitud de registro lgico 217 no 270 nombre de archivo 268 nombre de campo 274 nombre EXCEPT 292 numeracin de pginas 295 nmero 269 opcin 269 palabra de edicin 298, 299 palabras reservadas de fecha de usuario 295 posicin 270 posicin final 296 posiciones 63-64 275 posiciones 65-66 275 posiciones decimales 274 registros de excepcin 291 relacin de registro de campo 275 relacin lgica 268 restauracin de campos 302 secuencia 269 separador fecha/hora 272 tipo de formulario 268 ubicacin de campo 273 archivo disk bloqueo de archivos 85 bloqueo de registros 86 coma flotante 85 COMMIT, palabra clave 84 compartir la va de acceso de datos abierta 82 comprobacin de nivel 85 control de compromiso 84 conversiones de datos 82 descripcin general 81 descrito por programa 290 especificaciones de descripcin de archivo 218 especificar nombre de archivo de salida 290 especificar relacin lgica 291 estados de bloqueo 86 registros de excepcin 291 archivo especial descripcin general 87 descrito por programa 290 ejemplos 87 especificaciones de descripcin de archivo 218 especificar nombre de archivo de salida 290 especificar relacin lgica 291 registros de excepcin 291 utilizar el cuaderno Construir 87 archivos de direcciones de registros 591 archivos de ndices 591 archivos DISK 213 archivos PRINTER 213 archivos SPECIAL 213 archivos WORKSTN 592 rea de datos, cdigos de operaciones de 376 DEFINE (Definicin de campo) 428 UNLOCK (Desbloquear un rea de datos) 556
reas de datos 589 DEFINE (Definicin de campo) descripcin general 147 ASCEND 238, 593 ASCII 582 utilizacin de matrices 590 utilizacin de tablas 590 asignar almacenamiento 395 atributos %GETATR 327 %SETATR 337 establecer atributos 337 recuperar atributos 327
428
B
BASED 238 BEGACT 595 BEGACT, cdigo de operacin 391, 392, 397 BEGSR, cdigo de operacin 391, 400 bibliografa 609 bit, cdigos de operaciones 371 BITOFF, cdigo de operacin 371, 400 BITON, cdigo de operacin 371, 401 bits, comprobar 371, 551 BLOCK, palabra clave 220 buscar en una matriz 466 buscar en una tabla 466 bsqueda de series 527
C
cabeceras del listado del compilador 15 CABxx, cdigo de operacin 372, 375, 402 CACHE 203 CACHEREFRESH 203 calcular duraciones de fechas 378 clculo de una duracin 543 CALL, cdigo de operacin 372, 404 CALLB, cdigo de operacin 372, 407 CALLP, cdigo de operacin 372, 408 campo de datos de hora 126 informacin general 126 campo de datos de indicacin de la hora 128 campo de entrada ubicacin 273 campos, con posibilidad de nulos 128 campos de longitud variable 84, 134 campos de longitud variable, utilizacin 109 campos numricos edicin 173 formato 95 carcter de finalizacin de supresin de ceros en el cuerpo de la palabra de edicin 182 CASxx, cdigo de operacin 375, 391, 409 CAT, cdigo de operacin 389, 411 CCSID 82, 203, 239 CCSID, valores soportados 585 Ciclo RPG, no soportado en VisualAge RPG 587
614
clasificacin de matrices 539 CLASS 239 clave 218 para tipo de direcciones de registros 218 clave, campos con posibilidad de nulos por 131 claves compuestas 463 CLEAR, cdigo de operacin 187, 382, 422 CLOSE, cdigo de operacin 380, 424 CLSWIN 595 CLSWIN, cdigo de operacin 392, 424 CLTPGM 240 codificacin de subrutinas de usuario 450 cdigo de operacin COMP (comparar) 426 cdigo de operacin IFxx (si/entonces) 458 cdigo de operacin MHHZO, no soportado en VARPG 590 cdigo de operacin MHLZO, no soportado en VARPG 590 cdigo de operacin MLLZO, no soportado en VARPG 590 cdigo de operacin si/entonces (IF) 458 cdigos de edicin 590 cdigos de edicin simples 174 cdigos de estado, archivo 46 cdigos de estado, componente lgico 55 cdigos de estado, programa 51 cdigos de estado de archivo 46 cdigos de estado de programa 51 cdigos de operacin de VARPG 392 COMMIT, cdigo de operacin 380, 425 COMMIT, palabra clave 221 COMP, cdigo de operacin 375 comparacin, cdigos de operaciones de 375 COMP (Comparar) 426 comparar bits TESTB (Comprobar bit) 551 comparar y bifurcar (CABxx) 402 componentes lgicos *INZSR 29 *TERMSR 30 inicializar 29 iniciar y detener 29 terminacin anormal 32 terminacin normal 30 terminar 30 componentes lgicos primarios 29 componentes lgicos secundarios 29 comprobacin, operaciones de 392 informacin general 392 TEST (Comprobar fecha/hora/indicacin de la hora) 392 TEST (Comprobar fecha/hora/indicacin de la hora), cdigo de operacin 549 TESTB (Comprobar bit) 392, 551 TESTN (Comprobar numrico) 392, 553
comprobacin, operaciones de 392 (continuacin) TESTZ (Comprobar zona) 392, 554 comprobar bits 371, 551 concatenar dos series (CAT) 411 condicionales, expresiones 12 condicionamiento de la salida 291 utilizar indicadores 24 consideraciones para formatos numricos 122 CONST 240 constantes con nombre 141 descripcin general 139 normas para constantes con nombres 142 reglas para utilizar en especificaciones de salida 299 constantes con nombre 141 reglas 142 constantes figurativas 589 *ABORT 589 *ALLx.. ., *ALLXx1.. 142 *BLACK 589 *BLANK/*BLANKS 142 *BLUE 589 *BROWN 589 *CANCEL 589 *CYAN 589 *DARKBLUE 589 *DARKCYAN 589 *DARKGRAY 589 *DARKGREEN 589 *DARKPINK 589 *DARKRED 589 *END 589 *ENTER 589 *GREEN 589 *HALT 589 *HIVAL/*LOVAL 142 *IGNORE 589 *INFO 589 *NOBUTTON 589 *ON/*OFF 142 *PALEGRAY 589 *PINK 589 *RED 589 *RETRY 589 *START 589 *WARN 589 *WHITE 589 *YELLOW 589 *YESBUTTON 589 *ZERO/*ZEROS 142 reglas 144 control de entrada y salida 192 conversin de caracteres en un campo de fecha 387 conversiones de ASCII a EBCDIC 82 conversiones de datos 82 convertir, formato decimal empaquetado 317 convertir, formato decimal empaquetado (redondeo) 318 convertir a datos de tipo carcter, funcin incorporada 316 COPYNEST 204
COPYRIGHT 204 CTDATA 241 CURSYM 174, 204 CVTOEM 204 CVTOPT 204
CH
CHAIN, cdigo de operacin 380, 414 CHECK, cdigo de operacin 389, 417 CHECKR, cdigo de operacin 389, 419
D
dar formato a campos 295 dar formato a campos para salida 294, 295 DATEDIT 205 DATFMT 205, 241 DATFMT, palabra clave 221 datos de fecha 112 datos de tipo carcter 82 DEALLOC, cdigo de operacin 426 DEALLOC (liberar almacenamiento), cdigo de operacin 382 DEBUG 205 DECEDIT 174, 206 DECPOS ejemplo 331 DEFINE, cdigo de operacin 379, 428 definicin de datos 192 definicin de entrada 192 definicin de interfaz de procedimiento definicin 61, 70, 303 definicin de salida 192 definicin de un archivo 192 definicin de un campo basada en atributos 428 definicin de un campo como un rea de datos 428 definir con palabra clave LIKE subcampos 148 definir indicadores 17 definir partes de una clave 462 DELETE, cdigo de operacin 380, 431 desactivar los bits (BITOFF) 400 desbloquear un rea de datos o un registro 556 DESCEND 241, 593 descripcin de matrices 192 descripcin de tablas 192 detener componentes lgicos 29 devolver resultado como indicador resultante 19 devolver una serie 343 DIM 242 directiva condicional de compilacin /ELSE 13 /ELSEIF, expresin de la condicin 12 /ENDIF 13 /EOF 14 /IF, expresin de la condicin 12 /UNDEFINE 11 directivas del compilador /COPY 9, 588 /EJECT 14 ndice
615
directivas del compilador (continuacin) /SPACE 14 /TITLE 15 comparacin de las directivas del compilador ILE RPG con VARPG 588 DIV, cdigo de operacin 367, 432 divisin de factores 432 DLL 242 Do, cdigo de operacin 390, 433 DOU, cdigo de operacin 375, 380, 390, 435 DOUxx, cdigo de operacin 375, 390, 436 DOW, cdigo de operacin 375, 380, 390, 438 DOWxx, cdigo de operacin 375, 390, 439 DSPLY 595 DSPLY, cdigo de operacin 384, 392, 441 DTAARA 242, 593 DUMP, no soportado en VARPG 595
E
EBCDIC 579 edicin de archivos descritos externamente 185 edicin de campos numricos 173 edicin de nmeros decimales 206 edicin de salida 296 EDITW ejemplo 322 ejecutar programas 201 ejemplo de editc 320 ELSE, cdigo de operacin 390, 443 empezar subrutina de accin (BEGACT) 397 empezar subrutina de usuario (BEGSR) 400 ENDACT 51, 595 ENDACT, cdigo de operacin 391, 392, 444 ENDSR, cdigo de operacin 391, 445 ENDyy 443 ENDyy, cdigo de operacin 390 ENDyy (finalizar un grupo), cdigo de operacin 443 entero, formato 118 alineacin de campos 148 enteros, aritmtica 369 entrada archivo 215 entrada, campos con posibilidad de nulos 130 entrada de inicio/fin en especificacin de procedimiento 305 entrada de ubicacin de campo (especificaciones de entrada) 273 para archivo descrito por programa 273 entradas comunes a todas las especificaciones 194 espacio para un archivo de impresora 293 especificacin de procedimiento entrada de inicio/fin 305
especificacin de procedimiento (continuacin) general 303 nombre 305 palabras clave 305 tipo de formulario 304 especificaciones control 590 definicin 593 descripcin de archivo 591 entrada 594 especificacin de control 192 especificacin de descripcin de archivo 192 especificaciones de clculo 192 especificaciones de definicin 192 especificaciones de entrada 192 especificaciones de salida 192 informacin general 192 orden 192 reglas de continuacin 195 tipos 192 especificaciones de clculo ampliador de operacin 283 AND/OR 282 campo de resultado 284 descripcin general 281 factor 1 283 factor 2 284 factor 2 ampliado 281 indicadores 282 indicadores resultantes 285 informacin general 192 lnea de continuacin 281 longitud de campo 285 nivel de control 282 operacin y ampliador 283 posiciones decimales 285 reglas de continuacin 198 SR 282 tipo de formulario 282 especificaciones de control ALWNULL 202 CACHE 203 CACHEREFRESH 203 CCSID 203 COPYNEST 204 COPYRIGHT 204 CURSYM 204 CVTOEM 204 CVTOPT 204 DATEDIT 205 DATFMT 205 DEBUG 205 DECEDIT 206 ejecutar programas 201 EXE 206 EXPROPTS 206 EXTBININT 206 FLTDIV 207 generar programas 201 GENLVL 207 INDENT 207 informacin general 192 INTPREC 208 LIBLIST 208 NOMAIN 208
especificaciones de control (continuacin) OPTION 208 reglas de continuacin 197 SQLBINDFILE 209 SQLDBBLOCKING 210 SQLDBNAME 210 SQLDTFMT 210 SQLISOLATIONLVL 211 SQLPACKAGENAME 211 SQLPASSWORD 211 SQLUSERID 212 TIMFMT 212 tipo de formulario 201 TRUNCNBR 212 especificaciones de definicin 227 ALIGN 237 ALT 238 ASCEND 238 BASED 238 CCSID 239 CLASS 239 CLTPGM 240 CONST 240 CTDATA 241 DATFMT 241 DESCEND 241 descripcin externa 232 descripcin general 227 desde posicin 234 DIM 242 DLL 242 DTAARA 242 EXTFLD 243 EXTFMT 243 EXTNAME 244 EXTPROC 244 FROMFILE 247 hasta posicin/longitud 234 informacin general 192 INZ 247 LIKE 248 LINKAGE 249 MSGDATA 250 MSGNBR 250 MSGTEXT 250 MSGTITLE 250 nombre 231 NOOPT 251 NOWAIT 251 OCCURS 251 OPTIONS 252 OVERLAY 257 PACKEVEN 259 palabras clave 237 PERRCD 260 posicin 43 (reservada) 236 posiciones decimales 236 PREFIX 260 PROCPTR 260 reglas de continuacin 198 STATIC 260 STYLE 261 TIMFMT 261 tipo de datos internos 235 tipo de definicin 233 tipo de estructura de datos 233 tipo de formulario 231
616
especificaciones de definicin 227 (continuacin) TOFILE 261 VALUE 262 VARYING 262 especificaciones de descripcin de archivo adicin en archivo 216 archivo DISK 218 archivo PRINTER 218 archivo SPECIAL 218 clase de archivo 215 descripcin de archivo 214 descripcin general 213 dispositivo 218 formato de archivo 217 informacin general 192 longitud de registro 217 nombre de archivo 214 posicin 19 (reservada) 216 posicin 21 (Reservada) 217 posicin 28 (Reservada) 217 posicin 35 (reservada) 218 posicin 43 (reservada) 219 posiciones 29-33 (Reservadas) 217 reglas de continuacin 197 tipo de archivo 215 tipo de direcciones de registros 218 tipo de formulario 214 especificaciones de entrada carcter 271 cdigos de identificacin de registro 269 componente de cdigo 270 descripcin general 267 dgito 271 formato de datos 273 formato de fecha/hora externo 272 indicador de campo 18 indicador de identificacin de registro 17, 277 indicador de relacin de registros de campos 21 indicadores 269 indicadores de campo 276 informacin general 192 no 270 nombre de archivo 268 nombre de campo 274 nombre de registro 277 nmero 269 opcin 269 posicin 270 posiciones 17-20 277 posiciones 23-80 277 posiciones 31-48 278 posiciones 63-64 275 posiciones 65-66 275 posiciones 67-68 278 posiciones 7-20 277 posiciones 75-80 279 posiciones decimales 274 relacin de registro de campo 275 relacin lgica 268 secuencia 269 separador fecha/hora 272 ubicacin de campo 273
especificaciones de entrada para archivo descrito externamente indicador de identificacin de registro 277 indicadores de campo 278 nombre de campo externo 277 nombre de registro 277 posiciones 17-20 277 posiciones 23-80 277 posiciones 31-48 278 posiciones 63-64 278 posiciones 65-66 278 posiciones 67-68 278 posiciones 7-20 277 posiciones 75-80 279 especificaciones de entrada para archivo descrito por programa carcter 271 cdigos de identificacin de registro 269 componente de cdigo 270 dgito 271 formato de datos 273 formato de fecha/hora externo 272 indicador de identificacin de registro 269 indicadores 269 indicadores de campo 276 no 270 nombre de archivo 268 nombre de campo 274 nmero 269 opcin 269 posicin 270 posiciones 63-64 275 posiciones 65-66 275 posiciones decimales 274 relacin de registro de campo 275 relacin lgica 268 secuencia 269 separador fecha/hora 272 ubicacin de campo 273 especificaciones de salida *IN, *INxx, *IN(xx) 296 *PLACE 295 adicin de registros 301 adicin/supresin de registros 291 archivos descritos externamente 300 blanco despus 296 cdigos de edicin 296 constante 298, 299 dar formato a campos 295 dar formato a matrices 295 dar formato a tablas 295 entradas de control 290 espacio antes 293 espacio despus 293 espacio y saltar 293 fecha/hora 298, 299 formato de datos 297 identificacin de registro 290 indicador de identificacin de registro 291 indicadores de salida 294 informacin general 192 nombre de archivo 290 nombre de campo 294
especificaciones de salida (continuacin) nombre de registro 300 nombre EXCEPT 292 numeracin de pginas 295 palabra de edicin 298 palabras reservadas de fecha de usuario 295 posicin final 296 registros de excepcin 291 saltar antes 294 tipo 291 tipo de formulario 290 especificar entrada 267 establecer aparicin de estructura de datos 499 establecer atributos 337, 531 establecer longitud del campo 109 establecer valores iniciales 187 establecer valores por omisin 187 establecimiento de indicadores 382 estructura de datos de rea de datos DTAAREA, palabra clave 149 DTAAREA DEFINE 149 IN, utilizacin 150 OUT, utilizacin 150 UNLOCK, utilizacin 150 estructura de datos de estado de programa 48 descripcin general 150 estructura de datos de informacin de archivo descripcin general 37 INFDS 150 informacin de retorno de apertura 37, 41 informacin de retorno de archivo 37, 38 informacin de retorno de entrada/salida 37, 41 informacin de retorno dependiente de dispositivo 37, 42 estructuras de datos alineacin de 148 rea de datos 147, 149 definicin 148 descripcin general 147 DTAARA, palabra clave 149 DTAAREA DEFINE 149 estado de programa 147, 150 IN, utilizacin 150 INFDS 150 informacin de archivo 147, 150 OUT, utilizacin 150 recubrimiento del almacenamiento 148 UNLOCK, utilizacin 150 estructuras de datos como variables del lenguaje principal para SQL 74 estructuras del lenguaje principal para SQL 75 estructuras para SQL 74 EVAL, cdigo de operacin 380, 390 EVAL (Evaluar) 446 EVALR (Evaluar, ajuste por la derecha) 447 evaluacin, orden de 364 excepciones/errores de programa 48 ndice
617
EXCEPT, cdigo de operacin 380, 448 EXE 206 EXE, mdulo 66 EXFMT, no soportado en VARPG 595 EXPORT, no soportada en VARPG 593 EXPORT, palabra clave especificacin de procedimiento 305 exportar un procedimiento 305 exportar un programa 305 expresiones 380 operadores 351 operandos 353 resultados intermedios 357 expresiones, orden de evaluacin 365 expresiones que utilizan cdigos de operacin DOU (Hacer hasta) 380 DOW (Hacer mientras) 380 EVAL (Evaluar) 380, 446 EVALR (Evaluar, ajuste por la derecha) 447 IF (Si/Entonces) 380 informacin general 380 WHEN (Seleccionar cuando sea verdadero) 380 EXPROPTS 206 EXSR, cdigo de operacin 391, 449 EXTBININT 206 EXTFILE, palabra clave 221 EXTFLD 243 EXTFMT 243 EXTNAME 244 EXTPGM, no soportada en VARPG 593 EXTRCT, cdigo de operacin 377 EXTRCT (Extraer fecha/hora/indicacin de la hora) 452
F
factor 1 cdigos de operaciones aritmticas 367 factor 2 cdigos de operaciones aritmticas 367 factores de comparacin 426 factores de sustraccin 543 fecha, operaciones de resultados inesperados 379 fecha, palabras especiales 7 FEOD, cdigo de operacin 380, 453 flotantes, campos 117 FLTDIV 207 FOR, cdigo de operacin 390, 453 FORCE, no soportado en VARPG 595 formato binario 115, 274 campo de entrada 274 formato de datos interno definicin 95 formatos por omisin 96 formato de las palabras de edicin 184 formato decimal con zona 121, 589 formato decimal empaquetado 588 formato UCS-2 105 formatos de datos 95 especificacin de un formato de datos numricos 96
formatos de datos 95 (continuacin) especificacin de un formato externo de caracteres 97 especificacin de un formato externo de fecha u hora 97 interno 95 FORMLEN, palabra clave 222 forzar fin de los datos (FEOD) 453 FROMFILE 247 funciones especiales archivos descritos externamente 6 constantes figurativas 5 fecha de trabajos 5 fecha y hora 4 funciones incorporadas 4 transferencia de parmetros 6 funciones incorporadas %ABS 313 %ADDR 314 %CHAR 316 %DEC 317 %DECPOS 318 %DECH 318 %DIV 319 %EDITC 319 %EDITW 322 %ELEM 322 %EOF 323 %EQUAL 324 %ERROR 325 %FLOAT 325 %FOUND 326 %GETATR 327 %GRAPH 328 %INT 329 %INTH 330 %LEN 330 %OPEN 333 %PADDR 333 %REPLACE 334, 335 %SCAN 337 %SETATR 337 %SIZE 338 %STATUS 339 %STR 341 %SUBST 343 %TRIM 345 %TRIML 345 %TRIMR 346 %UCS2 346 %UNS 347 %UNSH 348 %XFOOT 348 EDITFLT 321
H
hora del da 554
I
IF, cdigo de operacin 375, 380, 390, 457 IFxx, cdigo de operacin 375, 390 IGNORE, palabra clave 222 IMPORT, no soportada en VARPG 593 IN, cdigo de operacin 460 IN, cdigo de operacin (recuperar un rea de datos) 376 INCLUDE, palabra clave 222 inclusin de campos 301 INDENT 207 indicador, operaciones de establecimiento de informacin general 382 SETOFF (Desactivar) 382, 537 SETON (Activar) 382, 537 indicador de ltimo registro (LR) como indicador de identificacin de registro 269 como indicador resultante 19 descripcin general 21 durante errores de evento 56 indicadores 17 *IN, *INxx, *IN(xx) 296 campo 587 Ciclo RPG 587 condicionamiento de archivo 587 desbordamiento 587 en las especificaciones de salida 291 identificacin de campo 587 identificacin de registro 587 identificadores de registro 587 indicadores de salida 301 nivel de control 587 para archivos de impresora 294 relacin en las especificaciones de salida 291 resultado 587 indicadores, salida 291 indicadores de campo 587 asignar en especificaciones de entrada 18 especificaciones de entrada 276 reglas para asignar 19 indicadores de condicionamiento condicionar clculos 22 indicadores de condicionamiento de archivo 587 indicadores de desbordamiento 587 indicadores de identificacin de registro 291, 587 con operaciones de archivo 18 descripcin general 17 en las especificaciones de salida 291 indicador de identificacin de registro 291 para archivos descritos por programa 269 indicadores de relacin de registros de campo descripcin general 21 reglas para 21
G
generacin de un programa 192 generar programas 201 GENLVL 207 GETATR 595 GETATR, cdigo de operacin 392, 456 globales, variables 62, 228 glosario 597 GOTO, cdigo de operacin 372, 457 grabacin de registros durante el tiempo de clculo 448
618
indicadores de salida 291, 301 indicadores generales 291 indicadores identificadores de campo 587 indicadores identificadores de registro 587 indicadores resultantes 587 descripcin general 19 reglas para asignar 20 INFDS, palabra clave 222 informacin de retorno de apertura descripcin general 41 ejemplo 41 informacin de retorno de archivo *FILE 38 *OPCODE 38 *RECORD 38 *ROUTINE 38 *STATUS 38 DELETE, utilizacin 39 descripcin general 38 ejemplo 40 EXCEPT, utilizacin 39 palabras clave 38 READPE, utilizacin 39 UNLOCK, utilizacin 39 UPDATE, utilizacin 39 informacin de retorno de entrada/salida bloqueo 43 descripcin general 41 ejemplo 41 informacin de retorno especfica de dispositivo bloqueo 43 descripcin general 42 ejemplo 43 INFSR 44, 56 INFSR, palabra clave 222 inicializacin, operaciones de 382 CLEAR (borrar) 422 CLEAR, cdigo de operacin 382 informacin general 382 RESET, cdigo de operacin 382 RESET (restablecer) 522 inicializacin de datos 187 inicializar componente lgicos 29 inicializar datos 187 iniciar componentes lgicos 29 insertar registros durante una compilacin 9 interlineado del listado del compilador 14 INTPREC 208 invocar subrutina condicionalmente (CASxx) 409 invocar subrutina de usuario (EXSR) 449 INZ 247 ITER, cdigo de operacin 372, 390, 461
K
KFLD, cdigo de operacin 379, 462 KLIST, cdigo de operacin 379, 463
M
manejo de errores durante un evento 56 errores de programa 48 excepciones de archivo 37 informacin de retorno de apertura 41 informacin de retorno de archivo 38 informacin de retorno de entrada/salida 41 informacin de retorno dependiente de dispositivo 42 subrutina de excepcin/error de archivo 44, 56 manejo de errores, SQL 78 manejo de excepciones durante un evento 56 excepciones de programa 48 informacin de retorno de apertura 41 informacin de retorno de archivo 38 informacin de retorno de entrada/salida 41 informacin de retorno dependiente de dispositivo 42 subrutina de excepcin/error de archivo 44, 56 Windows 58 matrices 295 matriz bsqueda con un ndice 167 bsqueda sin un ndice 166 carga de matrices de preejecucin 163 carga de matrices de tiempo de compilacin 161 carga de matrices de tiempo de ejecucin 159 clase de archivo 215 clasificacin 169 codificacin de matrices de tiempo de compilacin 160 codificacin de matrices de tiempo de ejecucin 158 codificacin de matrices de tiempo de preejecucin 162 comparacin con tablas 157 comparacin de matrices ILE RPG con VARPG 590 comprobacin de secuencia 163 dar formato para salida 295 definicin de matrices relacionadas 164 descripcin general 157 edicin 170 elementos distribuidos 160 especificacin de definicin 158 especificaciones de clculo 168 ndice 158 inicializacin de matrices de tiempo de compilacin 164 inicializacin de matrices de tiempo de ejecucin 164 inicializacin de matrices de tiempo de preejecucin 164 matriz de tiempo de ejecucin 159 nombres 158 ndice
L
LEAVE, cdigo de operacin 372, 390, 464 LEAVESR (abandonar subrutina), cdigo de operacin 465 LEN ejemplo 331 liberar almacenamiento 426 LIBLIST 208 LIKE 248 LIKE, palabra clave 148 lnea de continuacin descripcin de archivo 213 especificacin de clculo 281 especificacin de definicin 230 factor 2 ampliado 287 palabras clave de especificacin de control 197 palabras clave de especificacin de definicin 198 palabras clave de especificacin de descripcin de archivo 197 palabras clave de especificacin de salida 198 palabras clave de la especificacin de clculo 198 reglas 195 LINKAGE 249 listado del compilador 9 literal hexadecimal descripcin general 139 literales carcter 139 descripcin general 139 fecha 141 grficos 141 hexadecimal 139 hora 141 indicacin de la hora 141 numricos 140 UCS-2 141 literales de fecha 141, 205 literales de grficos 141, 589 literales de hora 141, 212 literales implcitos 142 literales numricos consideraciones para su utilizacin 140 longitud de campo cdigos de operaciones aritmticas 367 notacin absoluta (posicional) 148 notacin de longitud 148 LOOKUP, cdigo de operacin 371, 466 lote, no soportado en VARPG 588 LR 291
J
jerarquizacin de directivas /COPY 10 juego de caracteres literales 139 vlidos, caracteres 3
LL
llamada en prototipo definicin 67
619
matriz (continuacin) obtener el nmero de elementos 322 orden de clasificacin ASCII 163 ordenacin de matrices de tiempo de ejecucin 160 posicin final 296 registros consecutivos 159 registros fuente 161 salida 170 SORTA (Clasificar una matriz) 539 SQRT (Raz cuadrada) 540 sumar elementos de matriz utilizando XFOOT 563 XFOOT (Sumar los elementos de una matriz) 563 MHHZO, no soportado en VARPG 595 MHLZO, no soportado en VARPG 595 MLHZO, no soportado en VARPG 595 MLLZO, no soportado en VARPG 595 modificar un registro existente 558 mdulo EXE 66 NOMAIN 65 MOVE, cdigo de operacin 384, 468 MOVEA, cdigo de operacin 371, 384, 483 MOVEL, cdigo de operacin 384, 489 mover, operaciones 384 informacin general 384 MOVE 384, 468 MOVEA (Mover matriz) 384 MOVEL (mover por la izquierda) 489 MOVEL (Mover por la izquierda) 384 mover datos de tipo carcter, grfico y numrico 384 mover resto 498 MVR (Mover Resto) 498 MSGDATA 250 MSGNBR 250 MSGTEXT 250 MSGTITLE 250 MULT, cdigo de operacin 367, 497 multiplicacin de factores 497 MULT (Multiplicar) 497 MVR, cdigo de operacin 367, 498
O
obtencin de atributos 456 obtener aparicin de estructura de datos 499 obtener direccin de procedimiento 333 obtener el nmero de elementos de una matriz 322 obtener el nmero de elementos de una tabla 322 obtener el tamao de una constante o de un campo 338 obtener la direccin de una variable 313, 314 OCCUR, cdigo de operacin 499 OCCURS 251 OPDESC, no soportada en VARPG 593 OPEN, cdigo de operacin 380, 502 operaciones aritmticas ADD (ADD) 392 ADD (Aadir) 367 alineacin 367 DIV (Dividir) 367, 432 informacin general 367 MULT (Multiplicar) 367, 497 MVR (Mover Resto) 367, 498 redondeo 367 SQRT (Raz cuadrada) 367, 540 SUB (Restar) 367, 543 truncamiento 367 XFOOT (Sumar los elementos de una matriz) 367, 563 Z-ADD (Poner a cero y sumar) 367, 565 Z-SUB (Poner a cero y restar) 367, 566 operaciones aritmticas, consideraciones sobre el rendimiento 369 operaciones de archivo CLOSE (Cerrar archivos) 380 cdigo de operacin CLOSE (cerrar archivos) 424 cdigo de operacin DELETE (suprimir registro) 431 cdigo de operacin ROLBK (retrotraer) 526 COMMIT (Comprometer) 380, 425 CHAIN (Recuperacin aleatoria desde un archivo) 380, 414 DELETE (Suprimir registro) 380, 431 descripcin general 380 EXCEPT (Salida en tiempo de clculo) 380, 448 FEOD (Forzar fin de los datos) 380, 453 OPEN (Abrir archivo para proceso) 380 OPEN (Abrir Archivo para Proceso) 502 POST (Anotar) 380, 509 READ (Leer un registro) 380, 510 READC (Leer siguiente registro modificado) 380, 513 READE (Leer clave igual) 380, 514 READP (Leer registro anterior) 380, 516 READPE (Leer igual anterior) 380, 518
N
NEXT, no soportado en VARPG 595 nivel de control especificacin de clculo 282 nivel de control, indicadores de 587 NOMAIN 208 nombre de procedimiento externo 244 nombre EXCEPT 292, 301 nombre(S) reglas para 3 simblicos 3 NOOPT 251 notacin de longitud 148 NOWAIT 251 NULLIND ejemplo 333 numeracin de pginas 295
operaciones de archivo (continuacin) READS (Leer seleccionados) 380, 520 ROLBK (Retrotraer) 380, 526 SETGT (Establecer mayor que) 380, 532 SETLL (establecer lmite inferior), cdigo de operacin 534 SETLL (Establecer lmites inferiores) 380 UNLOCK (Desbloquear un rea de datos) 380, 556 UPDATE (Modificar registro existente) 380, 558 WRITE (Crear nuevos registros) 380, 561 operaciones de rea de datos IN (Recuperar un rea de datos) 376, 460 informacin general 376 OUT (Grabar un rea de datos) 376, 505 UNLOCK (Desbloquear un rea de datos) 376 operaciones de bifurcacin CABxx (comparar y bifurcar) 402 CABxx (Comparar y bifurcar) 372 ENDSR (Fin de subrutina de usuario) 445 GOTO (ir a) 457 GOTO (Ir a) 372 ITER (Iterar) 372, 461 LEAVE (Abandonar un grupo estructurado) 372, 464 TAG (Etiqueta) 372, 548 operaciones de bits BITOFF (Desactivar los bits) 371, 400 BITON (Activar los bits) 371, 401 informacin general 371 TESTB (Comprobar bit) 371, 551 operaciones de comparacin ANDxx (Y) 375, 396 CABxx (comparar y bifurcar) 402 CABxx (Comparar y bifurcar) 375 CASxx (Invocar subrutina condicionalmente) 409 CASxx (Invocar subrutina de usuario condicionalmente) 375 COMP (Comparar) 375 DOU (hacer hasta) 435 DOU (Hacer hasta) 375 DOUxx (Hacer hasta) 375, 436 DOW (hacer mientras) 438 DOW (Hacer mientras) 375 DOWxx (Hacer mientras) 375, 439 IF (Si) 375, 457 IFxx (si/entonces) 458 IFxx (Si/Entonces) 375 informacin general 375 ORxx (O) 375, 503 WHEN (Cuando) 559 WHEN (Seleccionar cuando sea verdadero) 375 WHENxx (Seleccionar cuando sea verdadero) 375, 559 operaciones de fecha ADDDUR (Aadir duracin) 377, 393
620
operaciones de fecha (continuacin) EXTRCT (Extraer fecha/hora) 377 EXTRCT (Extraer fecha/hora/indicacin de la hora) 452 informacin general 377 SUBDUR (Restar duracin) 377, 543 TEST (Comprobar fecha/hora/indicacin de la hora) 377 operaciones de GUI BEGACT (Empezar subrutina de accin) 397 CLSWIN (Cerrar ventana) 424 ENDACT (Fin de subrutina de accin) 444 GETATR (Recuperar Atributo) 456 informacin general 392 SETATR (Establecer atributo) 531 SHOWWIN (visualizar ventana) 538 STOP (detener un componente lgico) 542 operaciones de informacin informacin general 382 TIME (hora del da) 554 TIME (Hora del da) 382 operaciones de llamada CALL (Llamar a un programa) 372, 404 CALLB (Llamar a una DLL de enlace) 407 CALLB (Llamar a una funcin) 372 CALLP (Llamar a un procedimiento o programa con prototipo) 408 descripcin general 372 PARM (Identificar parmetros) 372, 506 PLIST (identificar una lista de parmetros) 508 PLIST (Identificar una lista de parmetros) 372 RETURN (Volver al llamador) 372, 525 START (iniciar un componente) 541 START (Iniciar un componente lgico) 372 operaciones de matrices informacin general 371 LOOKUP (Buscar un elemento de matriz o tabla) 371 LOOKUP (Buscar un Elemento en Tabla o Matriz) 466 MOVEA (Mover matriz) 371, 483 SORTA (Clasificar una matriz) 371 XFOOT (Sumar los elementos de una matriz) 371, 563 operaciones de mensajes DSPLY (Visualizar ventana de mensaje) 384, 441 informacin general 384 operaciones de programacin estructurada ANDxx (Y) 390, 396 CASxx (Invocar subrutina condicionalmente) 409 DO (Hacer) 390, 433 DOU (hacer hasta) 435
operaciones de programacin estructurada (continuacin) DOU (Hacer hasta) 390 DOUxx (Hacer hasta) 390, 436 DOW (Hacer mientras) 390, 438 DOWxx (Hacer mientras) 390, 439 ELSE (en caso contrario) 443 ELSE (En caso contrario hacer) 390 ENDyy (finalizar un grupo) 443 ENDyy (Finalizar un grupo) 390 EVAL (Evaluar) 390 FOR (para) 453 FOR (Para) 390 IF (Si) 457 IF (Si/entonces) 390 IFxx (si/entonces) 458 IFxx (Si/entonces) 390 informacin general 390 ITER (Iterar) 390, 461 LEAVE (Abandonar un grupo estructurado) 390, 464 ORxx (O) 390, 503 OTHER (De lo contrario seleccionar) 390, 504 SELECT (Iniciar un grupo de seleccin) 390, 530 WHEN (Cuando) 559 WHEN (Seleccionar cuando sea verdadero) 390 WHENnxx (Seleccionar cuando sea verdadero) 559 WHENxx (Seleccionar cuando sea verdadero) 390 operaciones de subrutina BEGACT (Empezar subrutina de accin) 397 BEGSR (Empezar subrutina de usuario) 400 CASxx (Invocar subrutina condicionalmente) 409 ENDACT (Fin de subrutina de accin) 444 ENDSR (Fin de subrutina de usuario) 445 EXSR (Invocar subrutina de usuario) 449 LEAVESR (abandonar subrutina) 465 START (iniciar un componente) 541 operaciones declarativas DEFINE (definicin de campo) 428 DEFINE (Definicin de campo) 379 informacin general 379 KFLD (definir partes de una clave) 462 KFLD (Definir partes de una clave) 379, 462 KLIST (Definir una clave compuesta) 379, 463 PARM (Identificar parmetros) 379, 506 PLIST (Identificar una lista de parmetros) 379, 508 TAG (Etiqueta) 379, 548 operadores 351 operandos 353 operandos de expresiones 353 OPNQRYF 82
OPTION 208 OPTIONS, palabra clave 252 OR 282, 291 OR, identificador de lneas en especificaciones de entrada 271 orden de clasificacin 579, 582 orden de clasificacin alterno 590 orden de evaluacin de operandos 364 ORxx, cdigo de operacin 375, 390, 503 OTHER, cdigo de operacin 390, 504 OUT, cdigo de operacin 505 OUT, cdigo de operacin (grabar un rea de datos) 376 OVERLAY 257 OVERLAY, palabra clave 148
P
PACKEVEN 259 PAGE 6, 294, 295 PAGE1 - PAGE7 294 PAGE1-PAGE7 6, 295 pgina, palabras especiales 6 palabra ALTSEQ, no soportada en VisualAge RPG 588 palabra clave ACTGRP, no soportada en VARPG 590 palabra clave ALTSEQ, no soportada en VARPG 590 palabra clave BNDDIR, no soportada en VARPG 590 palabra clave DEBUG, no soportada en VARPG 590 palabra clave DEVID, no soportada en VARPG 592 palabra clave DFTACTGRP, no soportada en VARPG 590 palabra clave DFTNAME, no soportada en VARPG 590 palabra clave ENBPFRCOL, no soportada en VARPG 590 palabra clave EXTIND, no soportada en VARPG 592 palabra clave EXTPROC 244 palabra clave FIXNBR, no soportada en VARPG 590 palabra clave FORMOFL, no soportada en VARPG 592 palabra clave FORMSALIGN, no soportada en VARPG 590 palabra clave FTRANS, no soportada en VARPG 590 palabra clave INDDS, no soportada en VARPG 592 palabra clave KEYLOC, no soportada en VARPG 592 palabra clave LANGID, no soportada en VARPG 590 palabra clave MAXDEV, no soportada en VARPG 592 palabra clave OFLIND, no soportada en VARPG 592 palabra clave OPENOPT, no soportada en VARPG 590 palabra clave OPTIMIZE, no soportada en VARPG 590 palabra clave PASS, no soportada en VARPG 592 ndice
621
palabra clave PGMNAME, no soportada en VARPG 592 palabra clave PRFDTA, no soportada en VARPG 590 palabra clave RAFDATA, no soportada en VARPG 592 palabra clave REMOTE, nueva en VisualAge RPG 592 palabra clave SAVEDS, no soportada en VARPG 592 palabra clave SAVEIND, no soportada en VARPG 592 palabra clave SFILE, no soportada en VARPG 592 palabra clave SLN, no soportada en VARPG 592 palabra clave SRTSEQ, no soportada en VARPG 590 palabra clave STATIC 230 palabra clave TEXT, no soportada en VARPG 590 palabra clave THREAD, no soportada en VARPG 590 palabra clave USRPRF, no soportada en VARPG 590 palabra EQUATE, no soportada en VARPG 588 palabra FILE, no soportada en VARPG 588 palabras clave, especificacin de descripcin de archivo 219 palabras clave de VARPG no soportadas especificaciones de control 590 especificaciones de definicin 593 especificaciones de descripcin de archivo 592 palabras de edicin 179 palabras especiales 7 palabras especiales de fecha de usuario 7 palabras reservadas 142 *ABORT 142 *ALLx.. .*BLACK 142 *BLANK/*BLANKS 142 *BLUE 142 *BROWN 142 *CANCEL 142 *CYAN 142 *DARKBLUE 142 *DARKCYAN 142 *DARKGRAY 142 *DARKGREEN 142 *DARKPINK 142 *DARKRED 142 *ENTER 142 *GREEN 142 *HALT 142 *HIVAL/*LOVAL 142 *IGNORE 142 *IN 25 *INFO 142 *INxx 25 *NOBUTTON 142 *NULL 142 *OK 142 *ON/*OFF 142 *PALEGRAY 142
palabras reservadas 142 (continuacin) *PINK 142 *RED 142 *RETRY 142 *WARN 142 *WHITE 142 *YELLOW 142 *YESBUTTON 142 *ZERO/*ZEROS 142 archivos descritos externamente 6 constantes figurativas 5 fecha de trabajos 5 fecha y hora 4 funciones incorporadas 4 transferencia de parmetros 6 parmetros en prototipo definicin 68 PARM, cdigo de operacin 372, 379, 506 PERRCD 260 PLIST, cdigo de operacin 372, 379, 508 PLIST, palabra clave 222 posibilidad de nulos, entrada de campos con 130 posibilidad de nulos, salida de campos con 130 posibilidad de nulos, soporte de opcin de campos sin nulos 134 slo entrada 133 posicin de archivo 6 posicin final 296 en registro de salida 296 posiciones decimales cdigos de operaciones aritmticas 367 POST, cdigo de operacin 380, 509 PREFIX 260 PREFIX, palabra clave 223 prioridad de los operadores en las expresiones 351, 353 procedimiento especificacin de procedimiento 303 procedimiento, palabras clave de especificacin EXPORT 305 proceso aleatorio por clave 226 proceso consecutivo 226 proceso de archivo de direcciones de registros 591 proceso de archivo primario 591 proceso de archivo secundario 591 proceso de nmero relativo de registro 226 proceso no por clave 218 proceso secuencial por clave 226 PROCNAME 592 PROCNAME, palabra clave 223 PROCPTR 260 programa o procedimiento en prototipo especificacin de procedimiento 303 prototipo definicin 67 y subprocedimientos 59 PRTCTL 293 PRTCTL, palabra clave 223 publicaciones, lista de 609 puntero de procedimiento 125
148
R
RCDLEN, palabra clave 224 READ, cdigo de operacin 380, 510 READC, cdigo de operacin 380, 513 READE, cdigo de operacin 380, 514 READP, cdigo de operacin 380, 516 READPE, cdigo de operacin 380, 518 READS 595 READS, cdigo de operacin 380, 392, 520 REALLOC, cdigo de operacin 521 REALLOC (reasignar almacenamiento con longitud nueva), cdigo de operacin 382 reasignar almacenamiento 521 RECNO, palabra clave 225 recubrimiento del almacenamiento en estructuras de datos 148 recuperacin de reas de datos 460 recuperacin de atributos 456 recuperar atributos 327 registro aadir 216 longitud 217 registros de excepcin 291 regla de precisin por omisin 359 reglas de las expresiones 356 reglas de posicin decimal de resultado 362 reglas de precisin 358 REL, no soportado en VARPG 595 REMOTE, palabra clave 225 RENAME, palabra clave 225 representacin, formato numrico 123 representacin de punto flotante 358 representacin externa, campo flotante 117 RESET, cdigo de operacin 187, 382, 522 restar duraciones de fecha-hora 378 restar una duracin 543 restaurar campos de salida 296 restricciones 569 resultados intermedios en las expresiones 357 resultados intermedios y precisin 359 RETURN 51 RETURN, cdigo de operacin 372, 525 ROLBK, cdigo de operacin 380, 526
S
salida archivo 215 indicadores de condicionamiento 24 salida, campos con posibilidad de nulos 130 salida en tiempo de clculo (EXCEPT) 448 saltar para un archivo de impresora 293 salto de pgina 14 SCAN, cdigo de operacin 389, 527 secuencia ascendente 238
622
SELECT, cdigo de operacin 390, 530 serie, devolver 343 serie, devolver sin blancos finales 346 serie, devolver sin blancos iniciales 345 serie, devolver sin blancos iniciales y de cola 345 serie, operaciones de 389 CAT (Concatenar dos series) 411 CAT (Concatenar dos series de caracteres) 389 CHECK (Comprobar) 389, 417 CHECKR (comprobacin inversa) 419 CHECKR (Comprobacin inversa) 389 informacin general 389 SCAN (Buscar serie) 389, 527 SUBST (Subserie) 389, 546 XLATE (Convertir) 389, 564 SETATR 595 SETATR, cdigo de operacin 392, 531 SETGT, cdigo de operacin 380, 532 SETLL, cdigo de operacin 380, 535 SETOFF, cdigo de operacin 382, 537 SETON, cdigo de operacin 382, 537 SHOWWIN 595 SHOWWIN, cdigo de operacin 392, 538 SHTDN, no soportado en VARPG 595 siglo, formato de 114 simblicos, nombres 3 smbolo & en el cuerpo de la palabra de edicin 184 smbolo de moneda 204, 205 en el cuerpo de la palabra de edicin 182 utilizacin en la palabra de edicin 182 sin signo, aritmtica 369 sin signo, formato 120 sintaxis de palabras clave 194 soporte de valores nulos 128 controlado por el usuario 129 operaciones por clave 131 SORTA, cdigo de operacin 371, 539 SQL / EXEC BEGIN DECLARE 77 / EXEC SQL INCLUDE SQLCA 75 / EXEC SQL WHENEVER 76 declaraciones de variables del lenguaje principal 72, 73 estructuras 74 estructuras de datos como variables del lenguaje principal 74 estructuras del lenguaje principal 75 manejo de errores 78 reglas sintcticas 71 variables de indicador 74 SQLBINDFILE 209 SQLDBBLOCKING 210 SQLDBNAME 210 SQLDTFMT 210 SQLISOLATIONLVL 211 SQLPACKAGENAME 211 SQLPASSWORD 211 SQLUSERID 212
SQRT, cdigo de operacin 367, 540 SR 282 START 595 START, cdigo de operacin 29, 372, 392, 541 STATIC 260 STOP 51, 595 STOP, cdigo de operacin 29, 392, 542 STYLE 261 SUB, cdigo de operacin 367, 543 subarchivo de datos alineacin de 148 definicin 148 recubrimiento del almacenamiento 148 SUBDUR, cdigo de operacin 377, 543 subprocedimientos mbito de parmetros 62, 228 codificacin de clculos 63 comparacin con subrutinas 66 definicin 59 especificacin de procedimiento 303 especificaciones para 193 gestin de excepciones/errores 65 interfaz de procedimiento 61, 70 NOMAIN, mdulo 65 secuencia de proceso normal 63 valores de retorno 61 subprocedimientos y subrutina de error/excepcin de programa y subprocedimientos 63 subrutina de excepcin/error de archivo 44, 56 subrutina de excepcin/error de programa 54 subrutina de inicializacin (*INZSR) con cdigo de operacin RESET 522 para datos 187 procesar clculos 187 y subprocedimientos 63 subrutina de manejo de errores ENDACT, cdigo de operacin 56 ENDSR, cdigo de operacin 56 RETURN, cdigo de operacin 56 STOP, cdigo de operacin 56 subrutinas BEGACT (Empezar subrutina de accin) 391 BEGSR (Empezar subrutina) 391 CASxx (Invocar subrutina condicionalmente) 391 comparacin con subprocedimientos 66 ejemplo 450 ENDACT (Fin de subrutina de accin) 391 ENDSR (Fin de subrutina) 391 EXSR (Invocar subrutina) 391 informacin general 391 LEAVESR (Abandonar una subrutina) 391 mximo permitido por programa 450 utilizacin dentro de un subprocedimiento 59 subrutinas de accin BEGACT (Empezar subrutina de accin) 397
SUBST, cdigo de operacin 389, 546 sumar elementos de matriz 563 supresin de registros 291
T
tabla archivo 215 clase de archivo 215 comparacin con matrices 157 comparacin de tablas ILE RPG con VARPG 590 dar formato para salida 295 descripcin general 157 diferencias entre matrices y tablas 171 lookup con dos tablas 171 lookup con una tabla 171 obtener el nmero de elementos 322 tablas 295 TAG, cdigo de operacin 372, 379, 548 terminacin *TERMSR 30 anormal 32 componente lgico 30 componentes lgicos 32 normal 30 terminacin anormal 32 terminar componentes lgicos 29, 30 TEST, cdigo de operacin 377, 392, 549 TESTB, cdigo de operacin 371, 392, 551 TESTN, cdigo de operacin 392, 553 TESTZ, cdigo de operacin 392, 554 TIME, cdigo de operacin 382, 554 TIMFMT 212, 261 TIMFMT, palabra clave 225 tipo de datos binario 83, 588 tipo de datos carcter 84, 102 tipo de datos de fecha 83 tipo de datos de hora 83 tipo de datos de indicacin de la hora 83 tipo de datos flotante 83 tipo de datos grfico 83, 104 tipo de datos hex 84 tipo de datos numrico con zona 83 tipo de datos puntero de base 588 tipo de datos puntero de procedimiento 589 tipo de formulario archivo descrito externamente 276 archivo descrito por programa 268 especificacin de control 201 especificaciones de clculo 282 especificaciones de entrada 272 especificaciones de salida 290 especificar en especificaciones de salida 290 tipo decimal empaquetado 83 tipos de datos, comparacin de ILE RPG con VARPG 588 TOFILE 261 TRUNCNBR 212
U
UDATE 294, 295 UDAY 294, 295 ndice
623
ltimo registro 291 UMONTH 294, 295 UNLOCK, cdigo de operacin 380, 556 UNLOCK, cdigo de operacin (desbloquear un rea de datos) USROPN, palabra clave UYEAR 294, 295 226 376
V
valor de retorno definicin 61 valores iniciales 187 63 dentro de subprocedimientos valores por omisin 187 VALUE 262 variable mbito 62 variable local mbito 62, 228 variables de indicador para SQL 74 variables del lenguaje principal que utilizan SQL 72, 73 VARYING, palabra clave 262 441 visualizar ventana de mensaje
W
WHEN, cdigo de operacin 375, 380, 390, 559 WHENxx, cdigo de operacin 375, 390, 559 WRITE, cdigo de operacin 380 WRITE (crear nuevos registros) 561
X
XFOOT, cdigo de operacin 367, 371, 563 XLATE, cdigo de operacin 389, 564
Z
Z-ADD, cdigo de operacin 367, 565 Z-SUB, cdigo de operacin 367, 566
624
SC10-3066-03