Sei sulla pagina 1di 648

AS/400e

VisualAge RPG Manual de consulta del lenguaje


V ersin 4.5.1 para Windows

SC10-3066-03

AS/400e

VisualAge RPG Manual de consulta del lenguaje


V ersin 4.5.1 para Windows

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

Novedades de este release . . . . . xvii

Parte 1. Introduccin al lenguaje de VisualAge RPG . . . . . . . . . . . 1


Captulo 1. Nombres simblicos y palabras reservadas . . . . . . . . . 3
Nombres simblicos . . . . . . . . . . . . Palabras con funciones especiales y palabras reservadas . . . . . . . . . . . . . . . Palabras especiales de funciones incorporadas . . Palabras especiales de fecha y hora . . . . . . Expresiones. . . . . . . . . . . . . . Palabras especiales de posicin de archivo . . . Literales implcitos . . . . . . . . . . . Palabras reservadas de indicadores . . . . . . Palabras reservadas de fecha de trabajos . . . . Palabras reservadas de numeracin de pginas . . Palabras especiales de transferencia de parmetros Colocacin de campos . . . . . . . . . . Grabacin de todos los campos . . . . . . . Posicin de archivo . . . . . . . . . . . . Palabras reservadas PAGE, PAGE1-PAGE7 . . . . Palabras especiales de fecha de usuario . . . . . 3 4 4 4 5 5 5 5 5 6 6 6 6 6 6 7

Captulo 4. Trabajar con componentes lgicos. . . . . . . . . . . . . . . 29


Iniciar y detener componentes lgicos . . Inicializar componentes lgicos . . . . . Terminar componentes lgicos . . . . . Terminacin normal . . . . . . . Terminacin anormal . . . . . . . Inicializar, terminar y restricciones de manejo eventos . . . . . . . . . . . . . . . . . . de . . . . . . . . . . . . 29 29 30 30 32

. 32

Captulo 5. Manejo de excepciones y errores. . . . . . . . . . . . . . . 37


Excepciones/errores de archivo. . . . . . . Estructura de datos de informacin de archivo Excepciones y errores de programa . . . . . Estructura de datos de estado de programa. . Cdigos de estado de programa . . . . . Subrutina de excepcin y error de programa . Excepciones/errores de componente lgico . . . Cdigos de estado de componente lgico . . Manejo de errores de evento. . . . . . . Manejo de excepciones . . . . . . . . . . . . . . . . . . 37 37 48 48 51 54 55 55 56 58

Captulo 2. Directivas del compilador . . 9


/COPY (Posiciones 7-11) . . . . . . . . Copia de archivos de un servidor AS/400 . Copia de archivos de una estacin de trabajo Directiva /COPY jerarquizada . . . . . Directivas de compilacin condicionales . . . Definicin de condiciones. . . . . . . Expresiones condicionales . . . . . . Comprobacin de condiciones . . . . . La directiva /EOF . . . . . . . . . . /EOF (Posiciones 7-10) . . . . . . . /EJECT (Posiciones 7-12) . . . . . . . . /SPACE (Posiciones 7-12). . . . . . . . /TITLE (Posiciones 7-12) . . . . . . . . . . . . . . . . . . . . . . 9 . 9 . 10 . 10 . 11 . 11 . 12 . 12 . 13 . 14 . 14 . 14 . 15

Captulo 6. Subprocedimientos y prototipos . . . . . . . . . . . . . 59


Definicin de subprocedimiento . . . . Definicin de interfaz de procedimiento . Valores de retorno . . . . . . . . mbito de definiciones . . . . . . Clculos de subprocedimiento . . . . Mdulo NOMAIN . . . . . . . . . Mdulo EXE . . . . . . . . . . . Subprocedimientos y subrutinas . . . . Prototipos y parmetros . . . . . . . Prototipos . . . . . . . . . . . Parmetros con prototipo . . . . . . Interfaz de procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 61 61 62 63 65 66 66 67 67 68 70

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

Captulo 7. Soporte SQL . . . . . . . 71


Reglas sintcticas generales . . . . . . . . . 71

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 . . . . . . . . . . .

. . . .

128 128 128 128

. 129 . 133 . 134 . 134

Captulo 10. Literales y constantes con nombre . . . . . . . . . . . . 139


Literales . . . . . . . . . . Literales de caracteres . . . . Literales hexadecimales . . . . Literales numricos . . . . . Literales de fecha . . . . . . Literales de hora . . . . . . Literales de indicacin de la hora. Literales de grficos . . . . . Literales UCS-2 . . . . . . . Constantes con nombre . . . . Constantes con nombre . . . . . Reglas para constantes con nombre Constantes figurativas . . . . . Reglas para constantes figurativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 139 139 140 141 141 141 141 141 141 142 142 142 144

Captulo 8. Consideraciones sobre archivos . . . . . . . . . . . . . . 81


Archivos de disco . . Archivos locales . . Archivos de AS/400 Archivos de impresora Archivos especiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 81 81 87 87

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

Captulo 11. Estructuras de datos. . . 147


Definicin de subcampos de estructura de datos Especificacin de la longitud de subcampo . . Alineacin de los subcampos de la estructura de datos . . . . . . . . . . . . . . . Estructura de datos de rea de datos . . . . . Estructura de datos de informacin de archivo . . Estructura de datos de estado de programa . . . Ejemplos de estructura de datos . . . . . . . 148 148 148 149 150 150 150

Captulo 12. Utilizacin de matrices y tablas. . . . . . . . . . . . . . . 157


Matrices . . . . . . . . . . . . . . . Nombre e ndice de una matriz . . . . . . Especificaciones esenciales de una matriz . . . Codificacin de una matriz de tiempo de ejecucin . . . . . . . . . . . . . . Carga de una matriz de tiempo de ejecucin Codificacin de una matriz de tiempo de compilacin . . . . . . . . . . . . . Carga de una matriz de tiempo de compilacin Codificacin de una matriz de tiempo de preejecucin . . . . . . . . . . . . . Carga de una matriz de preejecucin . . . . Comprobacin de secuencia para las matrices de caracteres. . . . . . . . . . . . . . Inicializacin de matrices . . . . . . . . . Matrices de tiempo de compilacin y de tiempo de preejecucin . . . . . . . . . . . . Definicin de matrices relacionadas . . . . . . Bsqueda de matrices . . . . . . . . . . 157 158 158 158 159 160 161 162 163 163 164 164 164 166

iv

VisualAge RPG Consulta del lenguaje

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

Captulo 13. Edicin de campos numricos. . . . . . . . . . . . . 173


Cdigos de edicin . . . . . . . . . . . Cdigos de edicin simples. . . . . . . . Cdigos de edicin de combinacin . . . . . Consideraciones de edicin . . . . . . . . Resumen de cdigos de edicin . . . . . . Palabras de edicin . . . . . . . . . . . Cmo codificar una palabra de edicin . . . . Partes de una palabra de edicin . . . . . . Resumen de reglas de codificacin para palabras de edicin . . . . . . . . . . . . . Edicin de archivos descritos externamente . . . 173 174 174 175 176 179 179 180 185 185

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

Captulo 14. Inicializacin de los datos 187


Subrutina de inicializacin (*INZSR). . Cdigos de operacin CLEAR y RESET Inicializacin de datos . . . . . . . . . . . . . . . . 187 . 187 . 187

Captulo 17. Especificaciones de descripcin de archivo . . . . . . . 213


Sentencia de especificacin de descripcin de archivo . . . . . . . . . . . . . Lnea de continuacin de palabras clave de descripcin de archivo . . . . . . . Posicin 6 (Tipo de formulario) . . . . Posiciones 7-16 (Nombre de archivo) . . Posicin 17 (Tipo de archivo) . . . . . Posicin 18 (Designacin de archivo) . . Posicin 19 (Reservada) . . . . . . . Posicin 20 (Adicin de archivo) . . . . Posicin 21 (Reservada) . . . . . . . Posicin 22 (Formato de archivo) . . . . Posiciones 23-27 (Longitud de registro) . . Posicin 28 (Reservada) . . . . . . . Posiciones 29-33 (Reservadas) . . . . . Posicin 34 (Tipo de direccin de registro). Posicin 35 (Reservada) . . . . . . . Posiciones 36-42 (Dispositivo) . . . . . Posicin 43 (Reservada) . . . . . . . Posiciones 44-80 (Palabras clave) . . . . . BLOCK(*YES|*NO) . . . . . . . . COMMIT{(rpg_nombre)} . . . . . . DATFMT(formato{separador}) . . . . . EXTFILE(nombrearchivo) . . . . . . FORMLEN(nmero) . . . . . . . . IGNORE(formatoreg{:formatoreg...}) . . . INCLUDE(formatoreg{:formatoreg...}) . . INFDS(nombreDS). . . . . . . . . INFSR(nombreSUBR) . . . . . . . . PLIST(nombre_Plist) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 214 214 214 215 216 216 217 217 217 217 217 217 218 218 219 219 220 221 221 221 222 222 222 222 222 222

Parte 3. Especificaciones . . . . . 189


Captulo 15. Acerca de las especificaciones VisualAge RPG . . . 191
Especificaciones de subprocedimiento Datos de programa . . . . . . Entradas comunes . . . . . . . Sintaxis de las palabras clave . . Reglas de continuacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 193 194 194 195

Captulo 16. Especificaciones de control . . . . . . . . . . . . . . 201


Sentencia de especificacin de control . . . . . Posicin 6 (Tipo de formulario) . . . . . . Posiciones 7-80 (Palabras clave) . . . . . . Sintaxis de las palabras clave . . . . . . . ALWNULL(*NO | *INPUTONLY | *USRCTL) CACHE(*YES | *NO) . . . . . . . . . CACHEREFRESH(*YES | *NO) . . . . . . CCSID(*GRAPH : parmetro | *UCS2 : nmero) COPYNEST(nmero) . . . . . . . . . . COPYRIGHT(serie de copyright) . . . . . CURSYM(sim) . . . . . . . . . . . CVTOEM(*YES | *NO) . . . . . . . . . 201 201 201 201 202 203 203 203 204 204 204 204

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

Captulo 18. Especificaciones de definicin . . . . . . . . . . . . . 227


Ubicacin de definiciones y mbito . . . . . Almacenamiento de definiciones . . . . . Sentencia de especificacin de definicin . . . Lnea de continuacin de palabras clave de especificacin de definicin. . . . . . . Lnea de nombre continuado de especificacin de definicin . . . . . . . . . . . Posicin 6 (Tipo de formulario) . . . . . Posiciones 7-21 (Nombre) . . . . . . . Posicin 22 (Descripcin externa) . . . . . Posicin 23 (Tipo de estructura de datos) . . Posiciones 24-25 (Tipo de definicin) . . . Posiciones 26-32 (Desde posicin) . . . . Posiciones 33-39 (Hasta posicin/Longitud) . Posicin 40 (Tipo de datos internos) . . . . Posiciones 41-42 (Posiciones decimales). . . Posicin 43 (Reservada) . . . . . . . . Posiciones 44-80 (Palabras clave) . . . . . Palabras clave de especificacin de definicin . ALIGN . . . . . . . . . . . . . ALT(nombre_matriz) . . . . . . . . . ASCEND . . . . . . . . . . . . . BASED(nombre_puntero_de base) . . . . BUTTON(botn1:botn2....) . . . . . . . CCSID(nmero | *DFT) . . . . . . . . CLASS(*JAVA:nombre_clase) . . . . . . CLTPGM(nombre de programa) . . . . . CONST(constante). . . . . . . . . . CTDATA . . . . . . . . . . . . . DATFMT(formato{separador}) . . . . . . DESCEND . . . . . . . . . . . . DIM(constante_numrica) . . . . . . . DLL(nombre) . . . . . . . . . . . DTAARA{(nombre_rea_datos)} . . . . . EXTFLD(nombre_campo) . . . . . . . EXTFMT(cdigo) . . . . . . . . . . EXTNAME(nombre_archivo{:nombre_formato}) EXTPROC(nombre) . . . . . . . . . FROMFILE(nombre_archivo) . . . . . . INZ{(valor inicial)} . . . . . . . . . LIKE(nombre_RPG) . . . . . . . . . LINKAGE(tipo_enlace) . . . . . . . . MSGDATA(msgdata1:msgdata2....) . . . . MSGNBR(*MSGnnnn o nombre de campo) . MSGTEXT(texto mensaje) . . . . . . . MSGTITLE(ttulo) . . . . . . . . . NOOPT . . . . . . . . . . . . . NOWAIT . . . . . . . . . . . . . . 228 . 230 . 230 . 230 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 231 231 232 233 233 234 234 235 236 236 237 237 237 238 238 238 239 239 239 240 240 241 241 241 242 242 242 243 243 244 244 247 247 248 249 250 250 250 250 251 251

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

Captulo 19. Especificaciones de entrada . . . . . . . . . . . . . . 267


Sentencia de especificacin de entrada . . . . . Descrito por programa . . . . . . . . . Descrito externamente . . . . . . . . . Archivos descritos por programa . . . . . . . Posicin 6 (Tipo de formulario) . . . . . . Entradas de identificacin de registro . . . . . Posiciones 7-16 (Nombre de archivo) . . . . Posiciones 16-18 (Relacin lgica). . . . . . Posiciones 17-18 (Secuencia) . . . . . . . Posicin 19 (Reservada) . . . . . . . . . Posicin 20 (Opcin) . . . . . . . . . . Posiciones 21-22 (Indicador de identificacin de registro) . . . . . . . . . . . . . . Posiciones 23-46 (Cdigos de identificacin de registro) . . . . . . . . . . . . . . Entradas de descripcin de campo . . . . . . Posicin 6 (Tipo de formulario) . . . . . . Posiciones 7-30 (Reservado) . . . . . . . Posiciones 31-34 (Atributos de datos) . . . . Posicin 35 (Separador fecha/hora) . . . . . Posicin 36 (Formato de datos) . . . . . . Posiciones 37-46 (Ubicacin de campo) . . . . Posiciones 47-48 (Posiciones decimales). . . . Posiciones 49-62 (Nombre de campo) . . . . Posiciones 63-64 (Reservadas) . . . . . . . Posiciones 65-66 (Reservadas) . . . . . . . Posiciones 67-68 (Relacin de registro de campo) Posiciones 69-74 (Indicadores de campo) . . . Archivos descritos externamente . . . . . . . Posicin 6 (Tipo de formulario) . . . . . . Entradas de identificacin de registro . . . . . Posiciones 7-16 (Nombre de registro) . . . . Posiciones 17-20 (Reservadas) . . . . . . . Posiciones 21-22 (Indicador de identificacin de registro) . . . . . . . . . . . . . . Posiciones 23-80 (Reservadas) . . . . . . . Entradas de descripcin de campo . . . . . . Posiciones 7-20 (Reservadas) . . . . . . . Posiciones 21-30 (Nombre de campo externo) Posiciones 31-48 (Reservadas) . . . . . . . Posiciones 49-62 (Nombre de campo) . . . . Posiciones 63-64 (Reservadas) . . . . . . . 267 267 267 268 268 268 268 268 269 269 269 269 269 272 272 272 272 272 273 273 274 274 275 275 275 276 276 276 276 277 277 277 277 277 277 277 278 278 278

vi

VisualAge RPG Consulta del lenguaje

Posiciones Posiciones Posiciones Posiciones

65-66 67-68 69-74 75-80

(Reservadas) . (Reservadas) . (Indicadores de (Reservadas) .

. . . . . . campo) . . .

. . . .

. . . .

. . . .

278 278 278 279

Captulo 20. Especificaciones de clculo . . . . . . . . . . . . . . 281


Sentencia de especificacin de clculo . . . . . Especificacin de clculo Factor 2 ampliado Lnea de continuacin . . . . . . . . . . . . Posicin 6 (Tipo de formulario) . . . . . . Posiciones 7-8 (Nivel de control) . . . . . . Posiciones 9-11 (Indicadores) . . . . . . . Posiciones 12-25 (Factor 1) . . . . . . . . Posiciones 26-35 (Operacin y ampliador) . . . Posiciones 36-49 (Factor 2) . . . . . . . . Posiciones 50-63 (Campo del resultado). . . . Posiciones 64-68 (Longitud de campo) . . . . Posiciones 69-70 (Posiciones decimales). . . . Posiciones 71-76 (Indicadores resultantes) . . . Sentencia de especificacin del Clculo del factor 2 ampliado . . . . . . . . . . . . . . . Posiciones 7-8 (Nivel de control) . . . . . . Posiciones 9-11 (Indicadores) . . . . . . . Posiciones 12-25 (Factor 1) . . . . . . . . Posiciones 26-35 (Operacin y ampliador) . . . Posiciones 36-80 (Factor 2 ampliado) . . . . 281 281 282 282 282 283 283 284 284 285 285 285 286 286 286 286 286 287

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

Captulo 22. Especificaciones de procedimiento . . . . . . . . . . . 303


Sentencia de especificacin de procedimiento . . Lnea de continuacin de palabra clave de especificacin de procedimiento . . . . . Lnea de nombre continuada de especificacin de procedimiento . . . . . . . . . . Posicin 6 (Tipo de formulario) . . . . . Posiciones 7-21 (Nombre) . . . . . . . Posicin 24 (Inicio/fin de procedimiento) . . Posiciones 44-80 (Palabras clave) . . . . . Palabras clave de especificacin de procedimiento EXPORT . . . . . . . . . . . . . . 303 . 304 304 304 305 305 305 305 . 305 . . . . .

Captulo 21. Especificaciones de salida . . . . . . . . . . . . . . . 289


Sentencia de especificacin de salida . . . . . Descrito por programa . . . . . . . . . Descrito externamente . . . . . . . . . Archivos descritos por programa . . . . . . . Posicin 6 (Tipo de formulario) . . . . . . Identificacin de registro y entradas de control . . Posiciones 7-16 (Nombre de archivo) . . . . Posiciones 16-18 (Relacin lgica). . . . . . Posicin 17 (Tipo - Archivo descrito por programa) . . . . . . . . . . . . . Posiciones 18-20 (Adicin/supresin de registro) Posiciones 21-29 (Indicadores ID de registro de archivo) . . . . . . . . . . . . . . Posiciones 30-39 (Nombre EXCEPT) . . . . . Posiciones 40-51 (Espacio y saltar) . . . . . Posiciones 40-42 (Espacio antes) . . . . . . Posiciones 43-45 (Espacio despus) . . . . . Posiciones 46-48 (Saltar antes) . . . . . . . Posiciones 49-51 (Saltar despus) . . . . . . Descripcin de campo y entradas de control . . . Posiciones 21-29 (Indicadores de salida) . . . Posiciones 30-43 (Nombre de campo) . . . . Posicin 44 (Cdigos de edicin) . . . . . . Posicin 45 (Blanco despus) . . . . . . . Posiciones 47-51 (Posicin final) . . . . . . Posicin 52 (Formato de datos) . . . . . . Posiciones 53-80 (Constante, Palabra de edicin, Atributos de datos) . . . . . . . . . . Archivos descritos externamente . . . . . . . Posicin 6 (Tipo de formulario) . . . . . . 289 289 290 290 290 290 290 291 291 291 291 292 293 293 293 294 294 294 294 294 296 296 296 297 298 300 300

Parte 4. Funciones incorporadas, Expresiones y Cdigos de operacin . . . . . . . . . . . . 307


Captulo 23. Funciones incorporadas 309
313 313 314 316 317 318 318 319 319 321 322 322 323 324 325 325 326 327 328 329 Funciones incorporadas (por orden alfabtico) . . %ABS (Valor absoluto de la expresin) . . . . %ADDR (Obtener direccin de variable) . . . %CHAR (Convertir a datos de tipo carcter) %DEC (Convertir a formato decimal empaquetado) . . . . . . . . . . . . %DECH (Convertir a formato decimal empaquetado con redondeo) . . . . . . . %DECPOS (Obtener el nmero de posiciones decimales) . . . . . . . . . . . . . %DIV (Devolver la porcin entera del cociente) %EDITC (Editar valor utilizando un Editcode) %EDITFLT (Convertir en representacin flotante externa) . . . . . . . . . . . . . . %EDITW (Editar valor utilizando una Palabra de edicin) . . . . . . . . . . . . . %ELEM (Obtener nmero de elementos) . . . %EOF (Devolver condicin de fin o principio de archivo) . . . . . . . . . . . . . . %EQUAL (Devolver condicin de coincidencia exacta) . . . . . . . . . . . . . . %ERROR (Devolver condicin de error) . . . %FLOAT (Convertir en formato flotante) . . . %FOUND (Devolver condicin de encontrado) %GETATR (Recuperar atributo) . . . . . . %GRAPH (Convertir a valor grfico) . . . . %INT (Convertir en formato de entero). . . .

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

Captulo 24. Expresiones . . . . . . 351


Operadores de expresin . . . . . . . . . Prioridad de las operaciones . . . . . . . Operandos de expresin . . . . . . . . . . Reglas de las expresiones . . . . . . . . Formato de los resultados numricos intermedios . . . . . . . . . . . . . Reglas de precisin para operaciones numricas Utilizacin de la regla de precisin por omisin Precisin de los resultados intermedios . . . . Ejemplo de reglas de precisin por omisin . . Utilizacin de las Reglas de precisin de Posicin decimal de resultado . . . . . . Ejemplo de Reglas de precisin de Posicin decimal de resultado . . . . . . . . . Evaluacin de circuito corto . . . . . . . . Orden de evaluacin . . . . . . . . . . . 351 352 353 356 357 358 359 359 360 362 363 364 365

Captulo 25. Cdigos de operacin


Operaciones aritmticas . . . . . . . Consideraciones sobre el rendimiento . Aritmtica de enteros y sin signo . . . Operaciones de matrices. . . . . . . Operaciones de bits . . . . . . . . Operaciones de bifurcacin . . . . . . Operaciones de llamada . . . . . . . Llamadas con prototipo . . . . . . Sintaxis de los nombres de los programas una llamada . . . . . . . . . . . . . . . . . . . . . . . . . . en . .

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

VisualAge RPG Consulta del lenguaje

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) . . . . . . . . . .

. . . .

443 444 445 446

. 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

. 556 . 557 . 558 559 . 561 563 . 564 . 565 . 566

Parte 5. Apndices . . . . . . . . 567


Apndice A. Restricciones . . . . . . 569 Apndice B. Resumen de cdigos de operacin . . . . . . . . . . . . . 571 Apndice C. rdenes de clasificacin
Orden de clasificacin EBCDIC Orden de clasificacin ASCII . . . . . . . . . . . . .

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

VisualAge RPG Consulta del lenguaje

Acerca de este manual


Esta publicacin proporciona informacin acerca del lenguaje RPG IV tal como se implementa utilizando el compilador VisualAge RPG con el sistema operativo Windows 95, Windows 98 o Windows NT. Esta publicacin contiene: v Conceptos bsicos del lenguaje como el juego de caracteres, nombres simblicos y palabras reservadas, directivas del compilador e indicadores v Tipos y formatos de datos v Manejo de errores y de excepciones v Subprocedimientos v Especificaciones v Funciones incorporadas, expresiones y cdigos de operacin. Este manual es para los programadores que estn familiarizados con el lenguaje de programacin VisualAge RPG. Este manual de consulta contiene una descripcin detallada del lenguaje VisualAge RPG. No contiene informacin sobre cmo utilizar el compilador de VisualAge RPG o cmo convertir los programas ILE RPG en programas VisualAge RPG. Para obtener ms informacin sobre estos temas, consulte la 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). Antes de utilizar este manual, deber estar familiarizado con las tareas de una aplicacin VisualAge RPG. Consulte la publicacin Iniciacin a VisualAge RPG y CODE/400, SC10-3287-01 (SC09-2625-01).

Requisitos previos e informacin relacionada


Para buscar informacin tcnica sobre AS/400, utilice AS/400 Information Center como punto de partida. A Information Center se puede acceder desde el CD-ROM AS/400e Information Center (versin en ingls: SK3T-1330-02 (SK3T-2027-03)) y desde uno de los sitios Web siguientes:
http://www.as400.ibm.com/infocenter http://publib.boulder.ibm.com/pubs/html/as400/infocenter.htm

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).

Copyright IBM Corp. 1994, 2000

xi

La biblioteca VisualAge RPG


*Nota: Todas las versiones en lnea de la publicaciones de WebSphere Development Tools para AS/400 han sido actualizadas. Las publicaciones cuyo ttulo est marcado con un asterisco (*) no se han vuelto a imprimir en este release. La biblioteca VisualAge RPG contiene las publicaciones siguientes: *Iniciacin a VisualAge RPG y CODE/400 Utilice esta publicacin para familiarizarse con los conceptos y la interfaz de VisualAge RPG y como consulta de tareas al utilizar VisualAge RPG. *Programacin con VisualAge para RPG Esta publicacin contiene informacin especfica acerca de la creacin de 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 VisualAge RPG. *VisualAge RPG Manual de consulta de componentes Este manual proporciona informacin sobre los componentes, atributos de componente, eventos de componente y atributos de evento de VisualAge RPG. Es un manual de consulta para todos aquellos que desarrollan aplicaciones con VisualAge RPG. *VisualAge RPG Manual de consulta del lenguaje Esta publicacin proporciona informacin acerca del lenguaje RPG IV tal como se implementa utilizando el compilador VisualAge RPG. Contiene: v Conceptos bsicos del lenguaje como el juego de caracteres, nombres simblicos y palabras reservadas, directivas del compilador e indicadores. v Tipos y formatos de datos v Manejo de errores y de excepciones v Especificaciones v Funciones incorporadas, expresiones y cdigos de operacin. Para obtener una lista de las publicaciones relacionadadas, consulte el apartado Bibliografa que hay al final de este manual. Gua de aprendizaje de VA RPG y CODE/400 Existe una gua de aprendizaje basada en HTML, que hallar en el URL siguiente:
http://www.ibm.com/software/ad/varpg/download/#interactive

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

VisualAge RPG Consulta del lenguaje

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/

Cmo enviar comentarios


Sus comentarios son muy importantes, pues nos permiten proporcionar informacin ms precisa y de mayor calidad. IBM agradece sus comentarios sobre este manual o cualquier otro de la documentacin de AS/400. v Si prefiere enviar los comentarios por correo, dirjalos a: IBM, S.A. National Language Solutions Center Avda. Diagonal, 571 08029 Barcelona Espaa Si enva por correo una hoja de comentarios del lector desde un pas que no sea Estados Unidos, puede entregar dicha hoja a una sucursal local de IBM o a un representante de IBM para enviarla con portes pagados. v Si prefiere enviar los comentarios por fax, utilice el nmero de telfono siguiente: Desde Espaa: 93 321 61 34 Desde otros pases: 34 93 321 61 34 v Si prefiere enviar los comentarios por correo electrnico, puede utilizar una de las direcciones siguientes: Comentarios sobre publicaciones: hojacom@vnet.ibm.com IBMLink: to toribm(torrcf) Comentarios sobre AS/400 Information Center: RCHINFOC@us.ibm.com Debe incluir estos datos: v El ttulo del libro v El nmero de publicacin v Nmero de pgina o tema al que hace referencia su comentario.

Acceso a informacin en lnea


VisualAge RPG contiene una serie de manuales y de ayuda en lnea. Puede acceder a la ayuda mientras utiliza el producto y puede ver los manuales mientras utiliza el producto o por separado.

Utilizacin de los manuales en lnea


Para ver un manual en lnea, realice una de las acciones siguientes: v Seleccione el nombre del manual del men desplegable Ayuda del Diseador GUI de VisualAge RPG GUI de la ventana de edicin.

Acerca de este manual

xiii

v Acceda a los manuales desde el men Inicio. Seleccione Programas VisualAge RPG y CODE400. A continuacin, seleccione Informacin de VARPG y CODE400.

Publicaciones en formato PDF


Todas las publicaciones de VA RPG y CODE/400 se incluyen como parte de la ayuda habitual para el producto. Adems del formato normal, el producto tambin contiene la versin PDF de las publicaciones. Nota: Debe disponer del programa Adobe Acrobat Reader, Versin 3.01 o superior para Windows, para ver el formato PDF de las publicaciones en la estacin de trabajo. Si no dispone de dicho programa, puede descargar una copia de la pgina Web de Adobe Systems (http://www.adobe.com). En la ayuda en lnea estn disponibles las siguientes publicaciones en formato PDF: v Iniciacin a VisualAge RPG y CODE/400 v Programacin con VisualAge para RPG v VisualAge RPG Manual de consulta de componentes v VisualAge RPG Manual de consulta del lenguaje Nota: Se han actualizado todas las versiones en lnea de las publicaciones de WebSphere Development Tools para AS/400.

Utilizacin de la ayuda en lnea


La ayuda en lnea est disponible en todas las reas de VisualAge RPG. Para obtener ayuda para una ventana determinada, un recuadro de dilogo o un cuaderno de propiedades, seleccione el pulsador Ayuda (si est disponible). Nota: Para ver la ayuda que est en formato HTML, la estacin de trabajo debe tener un navegador Web que soporte marcos como, por ejemplo Netscape Navigator 4.04 o superior, o Microsoft Internet Explorer 4.01 o superior. (El navegador recomendado es Netscape Navigator 4.6 o Internet Explorer 5.0)

Utilizacin de ayuda segn contexto


Para recibir ayuda segn contexto en cualquier momento, pulse F1. La ayuda que aparece es especfica al rea de la interfaz que tiene foco de entrada. El foco de entrada puede encontrarse en los elementos de men, ventanas, recuadros de dilogo y cuadernos de propiedades o en componentes especficos de stos. Para obtener ayuda segn contexto en los recuadros de dilogo, pulse en el signo de interrogacin (si est disponible) que hay en el ngulo superior derecho de la ventana. Aparece un signo de interrogacin al lado de la flecha del ratn. Pulse en una palabra o un campo y aparecer la informacin de ayuda sobre ese determinado campo.

Utilizacin del hipertexto


Algunas ventanas de ayuda contienen palabras, frases o grficos resaltados. Son enlaces de hipertexto que llevan de un tema a otro. Para visualizar ayuda especfica de un tema resaltado, pulse en l. Cuando siga un enlace de hipertexto, puede aparecer un botn Sincronizar en la esquina superior derecha del tema de ayuda. (Quizs deba retroceder pginas para verlo). Si pulsa el botn Sincronizar, la lista de temas del marco izquierdo se renueva a fin de mostrarle el lugar que ocupa el tema actual en la tabla de contenido general.

xiv

VisualAge RPG Consulta del lenguaje

Utilizacin de la tabla de contenido de ayuda


Cuando se visualice la ventana de Ayuda, pulse el botn Sincronizar (cuando est disponible) para visualizar la seccin Componentes en el marco de la izquierda. Pulse los smbolos ms + y menos para expandir y contraer la seccin correspondiente al componente deseado. Para ver un tema, pulse en l.

Utilizacin del recurso de bsqueda


El sistema de ayuda VisualAge RPG y CODE/400 utiliza un motor de bsqueda avanzado de texto completo, que devuelve aciertos o coincidencias HTML basados en la peticin de bsqueda. Para buscar un tema: 1. Escriba una palabra, frase o pregunta (no incluya los interrogantes) en el rea de texto situada junto a las +Opciones de bsqueda. Pulse Intro. 2. Si la palabra o frase no se encuentra, se visualiza informacin acerca del intento de bsqueda. De lo contrario, aparece la pgina Resultado de la bsqueda con una lista de temas en los que se ha encontrado la palabra o frase. Pulse el enlace que desee ver. 3. Puede utilizar las +Opciones de bsqueda para especificar el nmero de documentos que debe devolverse. Si desea obtener consejos para refinar las bsquedas, puede ver el tema Cmo buscar informacin en la ayuda en lnea.

Utilizacin de ayuda segn lenguaje


Para recibir ayuda segn lenguaje, pulse F1 en una ventana de edicin. Si el cursor se encuentra en un cdigo de operacin, recibir ayuda para dicho cdigo de operacin; sino, recibir ayuda para la especificacin actual.

Acerca de este manual

xv

xvi

VisualAge RPG Consulta del lenguaje

Novedades de este release


Las principales mejoras efectuadas en VisualAge RPG desde la versin 3.2.1 son los nuevos tipos de datos enteros con signo y sin signo de 3 y 20 dgitos, y el soporte para un nuevo tipo de datos UCS-2 (Juego de Caracteres Universal Versin 2) y la conversin de campos de tipo UCS-2 a campos de tipo grfico o carcter de un solo byte, y viceversa. La siguiente lista describe estas mejoras: v Soporte para nuevos tipos de datos enteros de 1 y 8 bytes: entero con signo 3I y 20I, y entero sin signo 3U y 20U Estos nuevos tipos de datos enteros proporcionan un mayor rango de valores enteros. El nuevo tipo 3U facilita la comunicacin de tipos de retorno de caracteres de un solo byte (char) y parmetros pasados por valor. La nueva palabra clave de especificacin de control INTPREC permite especificar una precisin de 20 dgitos para los valores intermedios en las expresiones con operaciones aritmticas binarias con enteros y enteros sin signo. Se han aadido las funciones incorporadas %DIV y %REM para dar soporte a las operaciones de divisin y resto entre enteros. v Soporte para el nuevo tipo de datos UCS-2 (Juego de Caracteres Universal Versin 2) o tipo de datos Unicode El juego de caracteres UCS-2 (Unicode) permite codificar los caracteres de muchos idiomas escritos. El campo es de tipo carcter en el que sus caracteres tienen una longitud de dos bytes. Al aadir soporte para Unicode, puede desarrollarse una aplicacin nica para una corporacin multinacional, minimizando la necesidad de realizar conversiones de pginas de cdigos. La utilizacin de Unicode permite procesar los caracteres de varios scripts sin prdida de su integridad. Soporte para las conversiones entre campos de tipo UCS-2 y campos de tipo grfico o carcter de un solo byte, utilizando las operaciones MOVE y MOVEL, y las nuevas funciones incorporadas %UCS2 y %GRAPH. En este release tambin se han realizado otras mejoras. Entre stas se incluyen: v Nuevas palabras especiales para la palabra clave INZ de la especificacin de definicin: INZ(*EXTDFT) permite utilizar en las DDS los valores por omisin para inicializar los subcampos de las estructuras de datos descritas externamente. v La nueva funcin incorporada %XFOOT suma todos los elementos de una expresin de matriz especificada. v El nuevo cdigo de operacin EVALR evala expresiones y asigna el resultado a un resultado de tipo carcter o grfico de longitud fija. La asignacin ajusta por la derecha los datos dentro del resultado. v El nuevo cdigo de operacin FOR realiza un bucle iterativo y permite especificar expresiones de formato libre en los valores de inicio, incremento y lmite. v El nuevo cdigo de operacin LEAVESR puede utilizarse para salir de una subrutina desde cualquier punto de su interior. v El nuevo parmetro *NEXT de la palabra clave OVERLAY(nombre:*NEXT) indica que un subcampo solapa otro subcamp en la siguiente posicin disponible.

Copyright IBM Corp. 1994, 2000

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.

Palabras clave de INZ(*EXTDFT) la especificacin de definicin OVERLAY(nombre:*NEXT)

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

C (formato UCS-2 de longitud fija o variable)

Tabla 2. Elementos del lenguaje nuevos desde la V3.2.1


Unidad del lenguaje Elemento Descripcin

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

VisualAge RPG Consulta del lenguaje

Tabla 2. Elementos del lenguaje nuevos desde la V3.2.1 (continuacin)


Unidad del lenguaje Elemento CCSID(*UCS2: nmero) Descripcin Establece el CCSID UCS-2 por omisin del mdulo. Este valor se utiliza en los 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 13488. Especifica la precisin decimal de los valores intermedios enteros y sin signo en las expresiones con operaciones aritmticas binarias. El valor por omisin, INTPREC(10), indica que se utilizar una precisin de 10 dgitos. Establece el CCSID grfico y UCS-2 de la definicin. Realiza una divisin entera entre los dos operandos n y m; el resultado es la parte entera de n/m. Los operandos deben ser valores numricos con cero posiciones decimales. Convierte datos de tipo carcter de un solo byte, grfico o UCS-2 a datos de tipo grfico. Realiza una operacin de resto entero entre los dos operandos n y m; el resultado es el resto de n/m. Los operandos deben ser valores numricos con cero posiciones decimales. Convierte datos de tipo carcter de un solo byte, grfico o UCS-2 a datos de tipo UCS-2. Efecta la suma de todos los elementos de la expresin de matriz numrica especificada. Evala una sentencia de asignacin que tenga la forma resultado=expresin. El resultado se ajustar por la derecha. Inicia un grupo de operaciones e indica el nmero de veces que se procesar el grupo. Los valores de inicio, incremento y lmite pueden ser expresiones de formato libre. ENDFOR finaliza un grupo de operaciones iniciadas mediante una operacin FOR. Se utiliza para salir de una subrutina desde cualquier lugar de su interior.

INTPREC(10 | 20)

CCSID(nmero | *DFT) Palabras clave de la especificacin de definicin Funciones incorporadas %DIV(n:m)

%GRAPH(char-expr | graph-expr | UCS2-expr {: ccsid}) %REM(n:m)

%UCS2(char-expr | graph-expr | UCS2-expr {: ccsid}) %XFOOT(array-expr)

Cdigos de operacin

EVALR

FOR

ENDFOR

LEAVESR

Novedades de este release

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

VisualAge RPG Consulta del lenguaje

Parte 1. Introduccin al lenguaje de VisualAge RPG


En este apartado se describen algunos de los elementos bsicos del leguaje VisualAge RPG (VARPG) como son: v Juego de caracteres v Nombres simblicos y palabras reservadas v Directivas del compilador v Indicadores v Subprocedimientos

Copyright IBM Corp. 1994, 2000

VisualAge RPG Consulta del lenguaje

Captulo 1. Nombres simblicos y palabras reservadas


Los caracteres vlidos para el lenguaje VisualAge RPG son los siguientes: letras ABCDEFGHIJKLMNOPQRSTUVWXYZ Se pueden utlilizar letras minsculas en los nombres simblicos aunque se convierten en maysculas durante la compilacin. nmeros 0123456789 caracteres +*,.&/$#:@_><=()% carcter en blanco

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.

Estructuras de datos Registros de salida de excepcin

Copyright IBM Corp. 1994, 2000

Tabla 3. Restricciones para nombres simblicos (continuacin)


Campos Un nombre de campo global puede definirse varias veces si cada definicin que utiliza el nombre tiene el mismo tipo de datos, la misma longitud y el mismo nmero de posiciones decimales. Todas las definiciones que utilizan el mismo nombre hacen referencia a un solo campo (es decir, a la misma rea del almacenamiento). Sin embargo, el campo slo se puede definir una vez en la especificacin de definicin. Un campo slo puede definirse una vez como subcampo de estructura de datos. Un nombre de subcampo no puede especificarse como el campo de resultado en un parmetro *ENTRY PLIST. El compilador de VisualAge RPG crea campos para los textos estticos y los campos de entrada de componentes con el mismo nombre que el componente. Si define estos campos explcitamente en el fuente, se aplican las reglas precedentes. Estas reglas no se aplican a los campos locales definidos en los subprocedimientos. No hay restricciones adicionales para los nombres de lista de campos de clave (KLIST). No hay restricciones adicionales para los nombres de etiquetas. No hay restricciones adicionales para las constantes con nombre. No hay restricciones adicionales para los nombres de lista de parmetros (PLIST). No hay restricciones adicionales para los nombres de prototipo. Un nombre de registro puede existir en un solo archivo del programa. Consulte el apartado BEGACT (Empezar subrutina de accin) en la pgina 397 para ver una descripcin de los nombres de subrutina de accin y el apartado BEGSR (Empezar subrutina de usuario) en la pgina 400 para ver una descripcin de los nombres de subrutina de usuario. Un nombre de tabla puede contener de 3 a 10 caracteres, debe empezar con los caracteres TAB y no puede definirse en un subprocedimiento.

Listas de campos de clave Etiquetas Constantes con nombre Listas de parmetros Nombres de prototipo Nombres de registro Subrutinas

Tablas

Palabras con funciones especiales y palabras reservadas


A continuacin se facilita un resumen de las palabras que tienen funciones especiales.

Palabras especiales de funciones incorporadas


Las palabras especiales *ALL y *NULL se utilizan con las funciones incorporadas. Para obtener ms informacin acerca de las funciones incorporadas, consulte el captulo Captulo 23. Funciones incorporadas en la pgina 309.

Palabras especiales de fecha y hora


Con los campos de Fecha, Hora e Indicacin de la hora se utilizan las palabras especiales siguientes:
*CDMY *CYMD0 *LONGJUL *CMDY *DMA *MDA *CYMD *ISO *EUR

VisualAge RPG Consulta del lenguaje

*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.

Palabras especiales de posicin de archivo


Las palabras especiales *START y *END se pueden utilizar para definir una posicin en un archivo. Para obtener ms informacin acerca de la posicin de archivo, consulte el apartado Posicin de archivo en la pgina 6.

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

Palabras reservadas de indicadores


Las palabras reservadas *IN e *INxx permiten hacer referencia a los indicadores como si se tratasen de datos. Si desea ms informacin, consulte Indicadores referidos como datos en la pgina 25.

Palabras reservadas de fecha de trabajos


Las palabras reservadas siguientes permiten acceder a la fecha de trabajo o a una parte de la fecha. Si desea ms informacin, consulte el apartado Palabras especiales de fecha de usuario en la pgina 7.
UDATE *DATE

Captulo 1. Nombres simblicos y palabras reservadas

UMONTH UYEAR UDAY

*MONTH *YEAR *DAY

Palabras reservadas de numeracin de pginas


Las palabras reservadas PAGE y PAGE1-PAGE7 se pueden utilizar para numerar las pginas de un informe o para numerar los campos de salida de forma secuencial. Si desea ms informacin, consulte el apartado Palabras reservadas PAGE, PAGE1-PAGE7.

Palabras especiales de transferencia de parmetros


Las palabras especiales *OMIT, *RIGHTADJ, *STRING y *VARSIZE se utilizar para pasar parmetros.

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.

Grabacin de todos los campos


*ALL permite grabar en la salida todos los campos que se han definido para un archivo descrito externamente. Para obtener ms informacin acerca de las constantes figurativas, consulte el apartado Reglas para constantes figurativas en la pgina 144.

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.

Palabras reservadas PAGE, PAGE1-PAGE7


PAGE se utiliza para numerar las pginas de un informe, los registros de salida de un archivo o los campos de salida. No provoca un salto de pgina. Los ocho campos PAGE posibles (PAGE, PAGE1, PAGE2, PAGE3, PAGE4, PAGE5, PAGE6 y PAGE7) se pueden utilizar para numerar distintos tipos de pginas de salida o para numerar pginas de diferentes archivos de impresora. Los campos PAGE pueden especificarse en las posiciones 30 a 43 de las especificaciones de salida o en las especificaciones de entrada o de clculo. Las reglas siguientes se aplican a la palabra clave PAGE: v La numeracin de las pginas, a menos que se indique lo contrario, empieza por 1 v En cada pgina nueva se suma 1 automticamente v Los campos PAGE pueden tener cualquier longitud v Los campos PAGE no deben tener ninguna posicin decimal

VisualAge RPG Consulta del lenguaje

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

Figura 1. Descripcin de registro de pgina


*...1....+....2....+....3....+....4....+....5....+....6....+....7... OFilename++EF..N01N02N03Excnam++++B++A++Sb+Sa+........................... O..............N01N02N03Field+++++++++YB.End++PConstant/editword/DTformat O* Si el indicador 15 est activado, el campo PAGE se establece a 0 O* y se suma 1 antes de imprimir el campo. Si est desactivado, se O* suma 1 al contenido del campo PAGE antes de imprimir. OPRINT E 99 01 O 15 PAGE 1 75

Figura 2. Restablecimiento de los campos de PAGE a cero

Palabras especiales de fecha de usuario


Se puede especificar una fecha para un programa en tiempo de ejecucin utilizando una palabra especial de fecha de usuario. Las palabras especiales de fecha de usuario son: UDATE, *DATE, UMONTH, *MONTH, UDAY, *DAY, UYEAR y *YEAR. Las palabras especiales de fecha de usuario acceden a la fecha del trabajo especificado en la descripcin de trabajo. La fecha de usuario se puede grabar como salida. Las palabras especiales de fecha de usuario se establecen cuando la aplicacin empieza a ejecutarse. No se actualiza si el programa se ejecuta pasada la medianoche ni si cambia la fecha del trabajo. Utilice la operacin TIME para obtener la hora y la fecha mientras se ejecuta el programa. Para obtener ms informacin acerca de la operacin TIME, consulte el apartado TIME (Hora del da) en la pgina 554. Las restricciones siguientes se aplican a los campos de fecha de usuario: v Estos campos son numricos, no de tipo de fecha.
Captulo 1. Nombres simblicos y palabras reservadas

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.

Edicin de UDATE y *DATE

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 da Impresin del mes

Impresin del ao

VisualAge RPG Consulta del lenguaje

Captulo 2. Directivas del compilador


Las directivas del compilador /TITLE, /EJECT, /SPACE y /COPY le permiten especificar informacin de cabecera para el listado del compilador, controlar el espaciado del listado del compilador e insertar registros procedentes de otros miembros de archivo durante de la compilacin. Las sentencias condicionales de directiva del compilador /DEFINE, /UNDEFINE, /IF, /ELSEIF, /ELSE y /EOF le permiten seleccionar u omitir registros del fuente. Las sentencias de directiva del compilador deben preceder a las matrices de tiempo de compilacin y a los registros de tabla.

/COPY (Posiciones 7-11)


La directiva del compilador /COPY sustituye /COPY por registros de otro archivo. Este archivo puede existir en la estacin de trabajo o en un servidor AS/400. Estos registros se insertan en el punto en que aparece /COPY y se compilan con el programa. Los registros insertados pueden contener cualquier especificacin vlida, incluyendo /COPY, hasta la mxima profundidad de jerarquizacin especificada por la palabra clave COPYNEST (32 cuando no se especifica). Para facilitar el mantenimiento de la aplicacin, ser deseable colocar los prototipos de los procedimientos exportados en un miembro /COPY. Si lo hace, asegrese de colocar una directiva /COPY para el miembro en el mdulo que contiene el procedimiento exportado y en todos los mdulos que contengan llamadas al procedimiento exportado. /COPY no se imprime en el listado del compilador, sino que se sustituye por el contenido del archivo especificado. Todos los miembros /COPY aparecen en la tabla de miembros COPY del listado del compilador.

Copia de archivos de un servidor AS/400


Para copiar archivos de un servidor AS/400, especifique la sentencia /COPY tal como se indica a continuacin: Posiciones 7-11 12 13-19 20 21-52 Entrada /COPY Blanco *REMOTE Blanco Identifica la ubicacin del miembro que se va a copiar (fusionar). El formato es: biblioteca/archivo,miembro v Debe especificarse un nombre de miembro. v Si no se especifica un nombre de archivo, se tomar el valor por omisin QRPGLESRC. v El nombre de archivo y de miembro deben estar separados por una coma. La coma debe ir incluida. v Si no se especifica la biblioteca, el archivo se busca en la lista de bibliotecas. El miembro se busca en todas las apariciones del archivo fuente especificado hasta que se localiza o hasta que la bsqueda finaliza.

Copyright IBM Corp. 1994, 2000

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"

Copia de archivos de una estacin de trabajo


Para copiar archivos de una estacin de trabajo local, entre la sentencia /COPY siguiente: Posiciones 7-11 12 13-79 Entrada /COPY Blanco Identifica la ubicacin del miembro que se va a copiar. El formato es: Unidad:\va\miembro.CPY La unidad y la va de acceso son opcionales. 80 81-100 Blanco Comentarios

En el ejemplo siguiente se muestra la sentencia /COPY para copiar archivos locales:


O/COPY D:\PROJECT1\INCLUDES\TOOLS1.CPY

Directiva /COPY jerarquizada


Se permite la jerarquizacin de directivas /COPY. Un miembro /COPY puede contener una o varias directivas /COPY (que a su vez pueden contener ms directivas /COPY, etc.). La profundidad mxima de jerarquizacin puede establecerse utilizando la palabra clave de especificacin de control COPYNEST. La profundidad mxima por omisin es 32. Debe asegurarse de que los archivos /COPY no se incluyen unos a otros infinitamente. Utilice las directivas de compilacin condicionales al principio de los archivos /COPY para evitar que las lneas fuente se utilicen ms de una vez.

10

VisualAge RPG Consulta del lenguaje

Directivas de compilacin condicionales


Las sentencias de directivas de compilacin condicionales permiten incluir o excluir de la compilacin secciones de cdigo fuente de forma condicional. v 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. v La expresiones condicionales DEFINED(nombre de condicin) y NOT DEFINED(nombre de condicin) se utilizan dentro de grupos /IF de comprobacin de condicin. v Las directivas condicionales de comprobacin /IF, /ELSEIF, /ELSE y /ENDIF, controlan qu lneas fuente debe leer el compilador. v La directiva /EOF indica al compilador que debe ignorar el resto de lneas fuente del miembro fuente actual.

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.

/DEFINE (Posiciones 7-13)


La directiva del compilador /DEFINE define condiciones para la compilacin condicional. Las entradas del rea de nombre de condicin tienen formato libre (no deben justificarse a la izquierda). Las entradas siguientes se utilizan para /DEFINE: Posiciones 7 - 13 14 15 - 80 81 - 100 Entrada /DEFINE Blanco nombre de condicin Comentarios

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.

/UNDEFINE (Posiciones 7-15)


Utilice la directiva /UNDEFINE para indicar que una condicin ya no est definida. Las entradas del rea de nombre de condicin tienen formato libre (no deben justificarse a la izquierda). Posiciones 7 - 15 16 17 - 80 81 - 100 Entrada /UNDEFINE Blanco nombre de condicin Comentarios

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.

Captulo 2. Directivas del compilador

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.

Expresin de la condicin /IF (Posiciones 7-9)


La directiva del compilador /IF se utiliza para comprobar una expresin de condicin para la compilacin condicional. Las entradas siguientes se utilizan para /IF: Posiciones 7-9 10 11 - 80 81 - 100 Entrada /IF Blanco Expresin de la condicin Comentarios

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.

Expresin de la condicin /ELSEIF (Posiciones 7-13)


La directiva del compilador /ELSEIF se utiliza para comprobar la expresin de una condicin dentro de un grupo /IF o /ELSEIF. Las entradas siguientes se utilizan para /ELSEIF: Posiciones 7 - 13 14 15 - 80 81 - 100 Entrada /ELSEIF Blanco Expresin de la condicin Comentarios

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

VisualAge RPG Consulta del lenguaje

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.

/ELSE (Posiciones 7-11)


La directiva del compilador /ELSE se utiliza para seleccionar incondicionalmente lneas fuente que se vayan a leer despus una comprobacin /IF o /ELSEIF fallida. Las entradas siguientes se utilizan para /ELSE: Posiciones 7 - 11 12 - 80 81 - 100 Entrada /ELSE Blanco Comentarios

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.

/ENDIF (Posiciones 7-12)


La directiva del compilador /ENDIF se utiliza para finalizar el grupo /IF, /ELSEIF o /ELSE ms reciente. Las entradas siguientes se utilizan para /ENDIF: Posiciones 7 - 12 13 - 80 81 - 100 Entrada /ENDIF Blanco Comentarios

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.

Reglas para la comprobacin de condiciones

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.

Captulo 2. Directivas del compilador

13

/EOF (Posiciones 7-10)


La directiva del compilador /EOF se utiliza para indicar que el compilador debe tener en cuenta que se ha alcanzado el final del archivo para el archivo fuente actual. Las entradas siguientes se utilizan para /EOF: Posiciones 7 - 10 11 - 80 81 - 100 Entrada /EOF Blanco Comentarios

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).

/EJECT (Posiciones 7-12)


Utilice la directiva del compilador /EJECT para comenzar una pgina nueva en el listado del compilador. Nota: /EJECT no se imprime en el listado del compilador, sino que se sustituye por una pgina nueva. Si aparece al principio de una pgina del listado del compilador, no se imprime otra pgina nueva. Para especificar una pgina nueva, entre la sentencia /EJECT siguiente: Posiciones 7-12 13-49 50-100 Entrada /EJECT Blanco Comentarios

/SPACE (Posiciones 7-12)


Utilice la directiva del compilador /SPACE para controlar el interlineado de la seccin fuente del listado del compilador. Nota: /SPACE no se imprime en el listado del compilador, sino que se sustituye por el interlineado especificado. El interlineado creado por /SPACE se aade a las dos lneas que se colocan entre los tipos de especificaciones. Para especificar informacin de cabecera, entre la sentencia /SPACE siguiente: Posiciones 7-12 Entrada /SPACE

14

VisualAge RPG Consulta del lenguaje

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

/TITLE (Posiciones 7-12)


Utilice la directiva del compilador /TITLE para especificar informacin de cabecera (por ejemplo, la clasificacin de seguridad o los ttulos). Dicha informacin aparece en la parte superior de todas las pginas del listado del compilador. Un programa puede contener varias sentencias /TITLE. Cada una de ellas proporciona informacin de cabecera para el listado del compilador hasta que se encuentra otra sentencia /TITLE. La sentencia /TITLE debe ser la primera especificacin que se encuentre para imprimir informacin en la primera pgina del listado del compilador. Adems de la informacin de cabecera del compilador, la informacin especificada en la sentencia /TITLE tambin se imprime. Nota: /TITLE no se imprime en el listado del compilador, sino que se sustituye por la informacin de cabecera. La sentencia /TITLE hace que se salte a la pgina siguiente antes de imprimir el ttulo. Para especificar informacin de cabecera, entre la sentencia /TITLE siguiente: Posiciones 7-12 13 14-100 Entrada /TITLE Blanco Informacin de ttulo

Captulo 2. Directivas del compilador

15

16

VisualAge RPG Consulta del lenguaje

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.

Indicadores definidos en las especificaciones


En las especificaciones pueden definirse los indicadores siguientes: v Indicador de identificacin de registro (posiciones 21 y 22 de las especificaciones de entrada) v Indicador de campo (posiciones 69 a 74 de las especificaciones de entrada) v Indicador resultante (posiciones 71 a 76 de las especificaciones de clculo) v La matriz *IN, el elemento de matriz *IN(xx) o el campo *INxx. El indicador definido se puede utilizar para condicionar las operaciones del programa.

Indicadores de identificacin de registro


Los indicadores de identificacin de registro se definen mediante entradas en las posiciones 21 y 22 de las especificaciones de salida y se activan cuando el tipo de registro correspondiente se selecciona para su proceso. Se pueden utilizar para condicionar determinadas operaciones de clculo y de salida. No es necesario asignarlos en un orden en concreto. Los indicadores de identificacin de registro son 01-99 y LR.

Copyright IBM Corp. 1994, 2000

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.

Reglas para la asignacin de indicadores de identificacin de registro


Las reglas siguientes se aplican al asignar indicadores de identificacin de registro a los registros de un archivo descrito por programa: v Se puede asignar el mismo indicador a dos o ms tipos de registro diferentes si se va a procesar la misma operacin en todos los tipos de registro. Para ello, especifique el indicador de identificacin de registro en las posiciones 21 y 22, e indique los cdigos de identificacin de registro para los distintos tipos de registro en una relacin OR. v Un indicador de identificacin de registro se puede asociar con una relacin AND, pero debe aparecer en la primera lnea del grupo. Los indicadores de identificacin de registro no se pueden especificar en las lneas AND. v La existencia de un registro no definido (un registro de un archivo descrito por programa que no se ha descrito mediante un cdigo de identificacin de registro en las posiciones 23 a 46) hace que el programa se detenga. v Un indicador de identificacin de registro se puede especificar como indicador de identificacin de registro para otro tipo de registro, como indicador de campo o como indicador resultante. No se emite ningn mensaje de diagnstico, pero este uso de los indicadores puede proporcionar resultados errneos. Las reglas siguientes se aplican al asignar indicadores de identificacin de registro en los registros de un archivo descrito externamente: v Las relaciones AND/OR no se pueden utilizar con nombres de formato de registro; sin embargo, se puede asignar el mismo indicador de identificacin de registro a ms de un registro. v Debe especificarse el nombre de formato de registro, en vez de especificar el nombre de archivo, en las posiciones 7 a 16.

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

VisualAge RPG Consulta del lenguaje

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.

Reglas para la asignacin de indicadores de campo


Las reglas siguientes se aplican al asignar indicadores de campo: v Los indicadores ms, menos, cero o blanco se desactivan al principio del programa. No se activan hasta que el campo que se est comprobando del registro que se acaba de leer cumpla la condicin (ms, menos, cero o blanco). v Los indicadores de campo no se pueden utilizar con matrices enteras. Sin embargo, se puede crear una entrada para un elemento de matriz. Los indicadores de campo nicamente estn permitidos para campos con posibilidad de nulos si se ha especificado la opcin Control del usuario o ALWNULL(*USRCTL). Consulte el apartado Soporte de valores nulos de base de datos en la pgina 128 para obtener informacin acerca del soporte de valor nulo. v A un campo de entrada numrico se le pueden asignar dos o tres indicadores de campo. Sin embargo, slo se activa el indicador que seala el resultado de la prueba de dicho campo; los dems se desactivan. v Si el mismo indicador de campo se asigna a campos en distintos tipos de registro, su estado (activado o desactivado) siempre se basa en el ltimo tipo de registro seleccionado. v Cuando distintos indicadores de campo se asignan a campos en tipos de registro diferentes, un indicador de campo permanecer activado hasta que se lee otro registro de ese tipo. De forma similar, un indicador de campo asignado a ms de un campo en un solo tipo de registro siempre refleja el estado del ltima campo definido. v Un indicador de campo se puede especificar como indicador de campo en otra especificacin de entrada, como indicador resultante, como indicador de identificacin de registro o como indicador de relacin de registros de campos. No se emite ningn mensaje de diagnstico, pero este uso de los indicadores puede proporcionar resultados errneos. v Si se especifica el mismo indicador en las tres posiciones, el indicador siempre se activar al seleccionarse el registro que contenga este campo.

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).

Reglas para la asignacin de indicadores resultantes


Las reglas siguientes se aplican al asignar indicadores resultantes: v Los indicadores resultantes no se pueden utilizar si el campo de resultado hace referencia a una matriz entera. v Si se utiliza el mismo indicador para comprobar el resultado de ms de una operacin, la ltima operacin procesada determina el valor del indicador. v Se puede utilizar el mismo indicador para comprobar ms de una condicin, dependiendo de la operacin especificada.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. C* C* Se utilizan dos indicadores resultantes para comprobar las distintas C* condiciones de una operacin de resta. Estos indicadores se usan C* para condicionar los clculos que deben procesarse para un trabajo C* de nmina. El indicador 10 se activa si las horas trabajadas (HRSWKD) C* superan las 40, y despus se usa para condicionar todas las operaC* ciones necesarias para calcular el pago de las mismas. Si el indiC* cador 20 no est activado (el empleado ha trabajado ms de 40 horas) C* se calcula el sueldo normal segn una semana de 40 horas. C* C HRSWKD SUB 40 OVERTM 3 01020 C* C N20PAYRAT MULT (H) 40 PAY 6 2 C 10OVERTM MULT (H) OVRRAT OVRPAY 6 2 C 10OVRPAY ADD PAY PAY C* C* Si el indicador 20 est activado (el empleado ha trabajado menos C* de 40 horas), se calcula el sueldo segn una semana de menos de C* 40 horas. C 20PAYRAT MULT (H) HRSWKD PAY C*

Figura 3. Indicadores resultantes utilizados para las operaciones de condicin

20

VisualAge RPG Consulta del lenguaje

Indicador de ltimo registro (LR)


El indicador LR se puede utilizar para finalizar el programa. Este indicador se comprueba al final de cada subrutina de accin para determinar si se debe finalizar el programa. Para obtener ms informacin, consulte el apartado ENDACT (Fin de subrutina de accin) en la pgina 444.

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.

Indicadores de relacin de registros de campos


Los indicadores de relacin de registros de campos se especifican en las posiciones 67 y 68 de las especificaciones de entrada. Los indicadores vlidos de este tipo son 01-99. Nota: Los indicadores de relacin de registros de campos no se pueden especificar para los archivos descritos externamente. Los indicadores de relacin de registros de campos asocian campos con un tipo determinado de registro cuando dicho tipo es uno de los indicados en una relacin OR. El campo descrito en la lnea de especificacin est disponible para entrada solamente si el indicador especificado en la entrada de relacin de registros de campos est activado o si la entrada est en blanco. Si la entrada est en blanco, el campo es comn a todos los tipos de registro definidos en la relacin OR.

Asignacin de indicadores de relacin de registros de campos


Especifique un indicador de identificacin de registro en las posiciones 67 y 68 para relacionar un campo con un tipo de registro determinado. Cuando se especifican varios tipos de registro en una relacin OR, todos los campos que no tienen un indicador de relacin de registros de campos en las posiciones 67 y 68 se asocian con todos los tipos de registro de la relacin OR. Para relacionar un campo con un solo tipo de registro, entre el indicador de identificacin de registro asignado a dicho tipo de registro en las posiciones 67 y 68 (vase la Figura 4 en la pgina 22). Se puede utilizar un indicador (01 a 99) que no sea de identificacin de registro en las posiciones 67 y 68 para condicionar el traslado del campo del rea de entrada a los campos de entrada.

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

Figura 4. Relacin de registros de campos

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.

Indicadores para el condicionamiento de clculos


Los indicadores que se utilizan para especificar las condiciones bajo las cuales se realiza un clculo se definen en otro punto del programa. Los indicadores para condicionar clculos se pueden especificar en las posiciones 9 a 11.

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

VisualAge RPG Consulta del lenguaje

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)

Figura 5. Condicionamiento de operaciones (Indicadores de campos)


*...1....+....2....+....3....+....4....+....5....+....6....+....7... IFilename++Sq..RiPos1+NCCPos2+NCCPos3+NCC................................ I........................Fmt+SPFrom+To+++DcField+++++++++....FrPlMnZr.... I* I* Se usa un indicador de identificacin de registro para condicionar I* una operacin. Cuando se lee un registro con una T en la posicin 1, I* se activa el indicador 01. Si este indicador est activado, el campo I* SAVE se suma a SUM. Cuando se lee un registro sin una T en la posicin I* 1, se activa el indicador 02. Se efecta la operacin de resta, I* condicionada por 02, en lugar de la operacin de suma. I* IFILE AA 01 1 CT I OR 02 1NCT I 10 15 2SAVE CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. C* C* Los indicadores de identificacin de registro 01 y 02 se asignan en C* las especificaciones de entrada. Aqu se usan para condicionar C* operaciones de clculo. C* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. C 01 ADD SAVE SUM 8 2 C 02 SUB SAVE SUM 8 2

Figura 6. Operaciones de condicionamiento (Indicadores de identificacin de registros)

Captulo 3. Indicadores

23

Indicadores utilizados en expresiones


Los indicadores pueden utilizarse como booleanos en expresiones en el campo factor 2 ampliado de la especificacin de clculo. Se les hace referencia como a datos (es decir, utilizando *IN o *INxx). En la Figura 7 puede ver un ejemplo.
CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C* En estos ejemplos, la estructura IF se efecta slo si 01 est C* activado. *IN01 se trata como booleano con un valor de activado o C* desactivado. C* En el primer ejemplo, el valor del indicador ('0' o '1') se C* comprueba. C IF *IN01 C* En el segundo ejemplo, la expresin lgica B < A se evala. C* Si es cierta, se activa 01. Si es falsa, 01 se desactiva. Es C* lo mismo que utilizar COMP con A y B y colocar 01 en la C* posicin de indicador resultante adecuada. C EVAL *IN01 = B < A

Figura 7. Indicadores utilizados en expresiones

En el apartado Captulo 24. Expresiones en la pgina 351 y EVAL (Evaluar expresin) en la pgina 446 hallar ms informacin.

Indicadores de condicionamiento de salida


Los indicadores utilizados para especificar las condiciones bajo las cuales se graba un registro de salida o un campo de salida deben estar definidos anteriormente. Los indicadores para condicionar la salida se especifican en las posiciones 21 a 29. Todos los indicadores son vlidos para condicionar la salida. Los indicadores que se utilicen para condicionar la salida deben estar definidos previamente como pertenecientes a uno de los tipos siguientes de indicadores: v Indicadores de identificacin de registro (especificaciones de entrada, posiciones 21 y 22) v Indicadores establecidos por el programa VisualAge RPG, como 01 a 99 v Matriz *IN, elemento de matriz *IN(xx) o campo *INxx. Si un indicador condiciona un registro completo, entre el indicador en la lnea que especifica el tipo de registro. Si condiciona cundo se graba un campo, ntrelo en la misma lnea que el nombre del campo. Los indicadores de salida no son necesarios en las lneas de salida. Si no se han especificado indicadores de condicionamiento, la lnea aparece en la salida cada vez que se comprueba la salida de ese tipo de registro. Si se especifican indicadores de condicionamiento, se puede entrar un indicador en cada uno de los tres campos de indicador de salida distintos (posiciones 22 y 23, 25 y 26, y 28 y 29). Si estos indicadores estn activados, se efecta la operacin de salida. Una N en la posicin anterior a cada indicador (posiciones 21, 24 27) significa que la operacin de salida slo se realiza si el indicador no est activado (indicador negativo). Ninguna de las lneas de salida debe estar condicionada por indicadores negativos nicamente; al menos uno de ellos debe ser positivo. Los indicadores de salida se pueden especificar en una relacin AND/OR indicando AND/OR en las posiciones 16 a 18. Puede utilizarse un nmero ilimitado de lneas AND/OR. Las lneas AND/OR se pueden utilizar para condicionar los registros de salida, pero no campos. Sin embargo, un campo se

24

VisualAge RPG Consulta del lenguaje

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

Figura 8. Utilizacin de EVAL con indicadores

Indicadores referidos como datos


Otro modo de hacer referencia y manipular indicadores es utilizando las palabras reservadas *IN e *INxx.

*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.

Reglas para la especificacin de indicadores referidos como datos


Las normas siguientes se aplican a *IN, al elemento de matriz *IN(xx) o al campo *INxx:
Captulo 3. Indicadores

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

Figura 9. Ejemplos de indicadores referidos como datos

26

VisualAge RPG Consulta del lenguaje

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

VisualAge RPG Consulta del lenguaje

Captulo 4. Trabajar con componentes lgicos


De una compilacin puede surgir un objeto destino de tres tipos posibles. El resultado depende de la palabra clave de especificacin de control que se utiliza: v Cuando las palabras clave NOMAIN y EXE no estn presentes, se crea un componente lgico. v Cuando se especifica la palabra clave NOMAIN, se crea un programa de utilidad DLL o NOMAIN. Esta DLL contiene solamente subprocedimientos RPG. v Cuando se especifica la palabra clave EXE, se crea un RPG EXE. Este mdulo contiene un procedimiento principal y subprocedimientos. En este apartado se describe cmo iniciar y detener y cmo inicializar y terminar los componentes lgicos. Para tener una visin general sobre cmo crear y utilizar las DLL de NOMAIN y los EXE, consulte el captulo 6, Captulo 6. Subprocedimientos y prototipos en la pgina 59.

Iniciar y detener componentes lgicos


Los cdigos de operacin START y STOP le permite ejecutar mltiples componentes lgicos en una aplicacin. La operacin START inicia un nuevo componente lgico en una aplicacin. La operacin STOP interrumpe la ejecucin de un componente lgico. Para obtener ms informacin sobre estos cdigos de operacin, consulte los apartados START (Iniciar un componente lgico o Llamar a programa local) en la pgina 541 y STOP (Detener un componente lgico) en la pgina 542.

Inicializar componentes lgicos


Una aplicacin VisualAge RPG puede constar de uno o ms componentes lgicos. Cada componente lgico se inicia de forma independiente. El primer componente lgico (primario) se inicia al ejecutar la aplicacin. Todos los componentes lgicos posteriores (secundarios) son iniciados por el usuario o por el programa en funcin de los eventos que se producen y las subrutinas de accin que manejan los eventos. Los componentes lgicos secundarios se pueden iniciar en cualquier orden. El archivo EXE de la aplicacin invoca al componente lgico primario. Desde la lnea de mandatos es posible pasar los parmetros a este componente lgico. Todos los parmetros se convierten desde la serie de caracteres entrada en el tipo de datos de destino de los parmetros en la *ENTRY PLIST. Los componentes lgicos secundarios son invocados mediante el cdigo de operacin START desde el componente lgicos primario o desde otros componentes lgicos secundarios. Mediante los cdigos de operacin PARM y PLIST se pueden pasar los parmetros a los componentes lgicos secundarios. Cuando se trata de un componente lgico secundario, los parmetros no se convierten. Una vez un componente lgico ha recibido cualquier parmetro, ocurre lo siguiente: 1. Los campos de programa son inicializados.
Copyright IBM Corp. 1994, 2000

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.

Terminar componentes lgicos


Los componentes lgicos se terminan al finalizar el componente lgico primario o al finalizar un componente lgico que ha iniciado uno o ms componentes lgicos. Cuando se terminan mltiples componentes lgicos, stos se terminan por orden jerrquico inverso. Cada componente lgico tiene su *TERMSR llamado (terminacin normal) por orden jerrquico inverso. Todos los componentes lgicos, por turno, atraviesan el borrado y la terminacin (por ejemplo, al cerrar archivos). Cuando un componente lgico finaliza de modo anormal en una aplicacin de mltiples componentes lgicos, nicamente dicho componente lgico finaliza anormalmente. El resto de componentes lgicos que tambin finalizan, lo hacen de forma normal.

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

VisualAge RPG Consulta del lenguaje

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.

Captulo 4. Trabajar con componentes lgicos

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.

Inicializar, terminar y restricciones de manejo de eventos


En algunos casos, en alguna fase de la aplicacin, no se permiten algunos cdigos de operacin, atributos y el manejador de excepciones por omisin. En las siguientes tablas se describen algunas restricciones durante la inicializacin, la terminacin o el manejo de eventos normales.
Tabla 5. Restricciones de cdigos de operacin durante la inicializacin, la terminacin y el manejo de eventos
Operacin de GUI CLSWIN DSPLY Inicializacin (*INZSR) No permitida Sin restricciones Terminacin (*TERMSR) No permitida No permitida Manejo de eventos Sin restricciones La ventana de informacin que se visualiza interfiere con cualquier evento que haya sido enviado. Si se ejecuta la operacin DSPLY desde la misma subrutina o desde una subrutina de accin jerarquizada despus de llevar a cabo una operacin CLSWIN o STOP (por ejemplo, los eventos Close Window o Close Component todava estn pendientes), la operacin DSPLY recibe los eventos pendientes pero no se ejecutan.

32

VisualAge RPG Consulta del lenguaje

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

No es posible finalizar el componente lgico padre

No es posible finalizar el componente lgico padre

Captulo 4. Trabajar con componentes lgicos

33

Tabla 6. Restricciones de atributos durante la inicializacin, terminacin y el manejo de eventos


Atributo Atributos de componente (GETATR, SETATR, %GETATR, %SETATR) Atributos de evento (%PART, ...) Atributos de sistema (%DSPWIDTH, %DSPHEIGHT) No permitida No permitida Sin restricciones No permitida No permitida Sin restricciones Inicializacin (*INZSR) No permitida Terminacin (*TERMSR) No permitida Manejo de eventos Sin restricciones

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

VisualAge RPG Consulta del lenguaje

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.

Ventana de informacin de mensajes, Terminar componente lgico

Sin restricciones

Se termina el componente lgico y se visualiza una ventana de informacin asncrona.

Captulo 4. Trabajar con componentes lgicos

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

VisualAge RPG Consulta del lenguaje

Captulo 5. Manejo de excepciones y errores


Los excepciones/errores se incluyen dentro de dos clases: de programa y de archivo. En un programa VARPG la informacin sobre las excepciones/errores de archivo y de programa est disponible mediante la utilizacin de estructuras de datos de informacin de archivo y estructuras de datos de estado de programa, respectivamente. Se pueden especificar las subrutinas de excepcin/error de archivo y de programa para manejar estos tipos de excepciones/errores. En este apartado se describe el manejo de errores y excepciones en los archivos, programas y componentes lgicos.

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.

Estructura de datos de informacin de archivo


La estructura de datos de informacin de archivo proporciona la informacin para los errores de archivo. La estructura de datos de informacin de archivo (INFDS) puede definirse para que todos los archivos pongan a disposicin del programa la informacin de retorno del archivo, del error y de la excepcin de archivo. Esta estructura de datos debe ser exclusiva para cada archivo. Contiene la siguiente informacin de retorno:
Copyright IBM Corp. 1994, 2000

37

v v v v

Informacin Informacin Informacin Informacin

de de de de

retorno retorno retorno retorno

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.

Informacin de retorno de archivo


La informacin de retorno de archivo empieza en la posicin 1 y finaliza en la posicin 80 de la INFDS. Contiene los datos sobre el archivo que son especficos para el programa de VisualAge RPG, incluido: v El nombre del archivo en el que se produjo la excepcin o el error v El registro que se estaba procesando cuando se produjo la excepcin o el error o bien el registro que caus la excepcin o el error v La ltima operacin que se procesaba cuando se produjo la excepcin o el error v El cdigo de estado v La rutina donde se produjo la excepcin o el error Nota: No es recomendable escribir encima de la seccin de retorno de archivo ya que puede producir resultados inesperados en la ulterior manejo de errores. Palabras clave especiales definen la ubicacin de algunos de los campos utilizados ms a menudo en la seccin de retorno del archivo. La Tabla 9 ofrece un resumen de estas palabras clave.
Tabla 9. Informacin de retorno de archivo en la INFDS
De (Pos. 26-32) 1 9 10 11 A (Pos. 33-39) 8 9 10 15 Formato Longitud 8 1 1 5.0 *STATUS Palabra clave Informacin

Carcter Carcter Carcter Decimal con zona

*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

VisualAge RPG Consulta del lenguaje

Tabla 9. Informacin de retorno de archivo en la INFDS (continuacin)


De (Pos. 26-32) 16 A (Pos. 33-39) 21 Formato Longitud 6 Palabra clave Informacin

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

Carcter Decimal con zona

8 5.0

Captulo 5. Manejo de excepciones y errores

39

Tabla 9. Informacin de retorno de archivo en la INFDS (continuacin)


De (Pos. 26-32) 38 A (Pos. 33-39) 45 Formato Longitud 8 Palabra clave Informacin

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

Nmero de mensaje del sistema o mquina No utilizado

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

VisualAge RPG Consulta del lenguaje

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.

Informacin de retorno de apertura


Desde la posicin 81 hasta la posicin 240 de la estructura de datos de informacin de archivo se encuentra la informacin de retorno de apertura. El contenida de esta rea se copia en la seccin de retorno de apertura siempre que el archivo asociado a la INFDS est abierto. Esto incluye a los miembros abiertos como resultado de una operacin de lectura en un archivo procesado de mltiples miembros. Nota: La informacin de retorno de apertura no se proporciona para los archivos de impresora, sin embargo s que se proporciona la informacin de retorno de dispositivo. En 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 el sitio Web http://publib.boulder.ibm.com/pubs/html/as400/infocenter.htm, encontrar una descripcin completa del contenido del rea de informacin de retorno de apertura. Ejemplo de informacin de retorno de apertura de la INFDS: Para definir una INFDS que contiene campos en la seccin de retorno de apertura, 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 seccin de retorno de apertura, utilice el desplazamiento, tipo de datos y longitud dados en Information Center y realice los clculos siguientes:
Desde = 81 + Desplazamiento A = Desde - 1 + Longitud_carcter Longitud_carcter = Longitud (en bytes)

Informacin de retorno de Entrada/Salida


Las posiciones que van desde la 241 hasta la 366 de la estructura de datos de informacin de archivo se utilizan para la informacin de retorno de entrada/salida. El contenido del rea de retorno de entrada/salida comn de archivo se copia en la seccin de retorno de entrada/salida nicamente despus de realizar un POST en el archivo. Para obtener ms informacin, consulte el apartado POST (Anotar) en la pgina 509. Si desea obtener una descripcin del contenido del rea de informacin de retorno de entrada/salida, consulte el apartado DB2 Universal Database para AS/400 de la categora Bases de datos y sistemas de archivos de Information Center. Nota: La informacin de retorno de E/S no se proporciona para los archivos de impresora, sin embargo s que se proporciona la informacin de retorno especfica de dispositivo. Ejemplo de informacin de retorno de Entrada/Salida de la INFDS: Para definir una INFDS que contiene campos en la seccin de retorno de apertura, especifique las entradas siguientes:
Captulo 5. Manejo de excepciones y errores

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)

Por ejemplo, para la clase de dispositivo de un archivo, Information Center indica:


Desplazamiento = 30 Tipo de datos es de caracteres Longitud = 2 Por tanto, Desde = 241 + 30 = 271, A = 271 - 1 + 2 = 272.

Consulte el subcampo DEV_CLASS de la Figura 11.


FFilename++IT.A.FRlen+......A.Device+.Keywords+++++++++++++++++++++++++++++Comments++++++++++++ FMYFILE IF E DISK INFDS(MYIOFBK) REMOTE DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++Comments++++++++++ DMYIOFBK DS D * 241-242 no usadas D WRITE_CNT 243 246B 0 * Escribir cuenta D READ_CNT 247 250B 0 * Leer cuenta D WRTRD_CNT 251 254B 0 * Escribir/leer cuenta D OTHER_CNT 255 258B 0 * Otras cuentas de E/S D OPERATION 260 260 * Operacin actual D IO_RCD_FMT 261 270 * Nombre formato Rcd D DEV_CLASS 271 272 * Clase dispositivo D IO_PGM_DEV 273 282 * Nombre dispositivo pgm D IO_RCD_LEN 283 286B 0 * Len Rcd de E/S

Figura 11. Codificar informacin de retorno de entrada/salida

Informacin de retorno dependiente de dispositivo


La informacin de retorno dependiente de dispositivo de la estructura de datos de informacin de archivo empieza en la posicin 367 de la INFDS. Contiene informacin de retorno de entrada/salida especifica para una base de datos o un dispositivo de impresora. La longitud de la INFDS cuando se necesita la informacin de retorno dependiente de dispositivo es variable y depende de si el tipo de dispositivo del archivo es variable y de si el archivo tiene un conector de referencia o no (si es un archivo DISK). En los archivos DISK descritos externamente, la INFDS tiene, como mnimo, la longitud suficiente como para mantener la clave ms larga del archivo que empieza en la posicin 401.

42

VisualAge RPG Consulta del lenguaje

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.

Consulte el subcampo DB_RRN en la estructura de datos DBFBK en la Figura 12.


FFilename++IT.A.FRlen+......A.Device+.Keywords+++++++++++++++++++++++++++++Comments++++++++++ FMYFILE IF E DISK INFDS(DBFBK) REMOTE DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++Comments++++++++++ DDBFBK DS D FDBK_SIZE 367 370B 0 * Tamao de fdbk de BD D JOIN_BITS 371 374B 0 * Bits de JFILE D LOCK_RCDS 377 378B 0 * Nm. reg. bloqueados D POS_BITS 385 385 * Bits pos. de archivo D DLT_BITS 384 384 * Bits suprim. registro D NUM_KEYS 387 388B 0 * Claves numr.(bin) D KEY_LEN 393 394B 0 * Longitud clave D MBR_NUM 395 395B 0 * Nmero miembros D DB_RRN 397 400B 0 * Nm.rel.registro D KEY 401 2400 * Valor clave (tamao D * mximo 2000)

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.

Subrutina de excepcin y error de archivo (INFSR)


Para identificar la subrutina que recibe el control siguiendo todos los errores o excepciones de archivo, especifique la palabra clave INFSR en la especificacin de descripcin de archivo con el nombre de la subrutina. El nombre de subrutina puede ser *PSSR, indicando que se da el control de las excepciones y errores de este archivo a la subrutina de excepcin/error de programa. Una subrutina de excepcin/error recibe el control cuando se produce una excepcin o error en una operacin de archivo que no tiene un indicador especificado en las posiciones 73 y 74. El cdigo de operacin EXSR tambin puede ejecutar la subrutina de excepcin/error de archivo. En la subrutina de excepcin/error, se pueden utilizar todos los cdigos de operacin. El factor 1 de la operacin BEGSR y el factor 2 de la operacin EXSR deben contener el nombre de la subrutina que recibe el control (el mismo nombre como se especifica con la palabra clave en las especificaciones de descripcin de archivo). La operacin ENDSR debe ser la ltima especificacin en la subrutina de excepcin/error de archivo y debe ser especificada de la siguiente manera: Posicin 6 7-11 12-25 26-35 36-49 Entrada C Blanco Puede contener una etiqueta que se utiliza en una especificacin GOTO dentro de una subrutina. ENDSR Entrada opcional para designa donde se devolver el control siguiendo el proceso de la subrutina. La entrada debe ser un campo de caracteres, un literal o un elemento de matriz cuyo valor especifique uno de los siguientes puntos de retorno. Nota: Si los puntos de retorno se especifican como literales, deben ir entre apstrofos. Si se especifican como constantes con nombre, las constantes deben ser caracteres y deben contener nicamente el punto de retorno sin ningn espacio en blanco delante. Si se especifican en campos o elementos de matriz, el valor debe ir ajustado a la izquierda en el campo o elemento de matriz. *DEFAULT Devuelve el control desde la subrutina de accin actual y se ejecuta el proceso por omisin correspondiente al evento actual. *NODEFAULT Devuelve el control desde la subrutina de accin actual. No se ejecuta ningn proceso por omisin. Si LR est activado cuando el proceso alcance este punto, el componente lgico habr terminado y los puntos de retorno *DEFAULT y *NODEFAULT son ignorados. *CANCL Termina el componente lgico de forma anormal.

44

VisualAge RPG Consulta del lenguaje

*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:

Captulo 5. Manejo de excepciones y errores

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.

Cdigos de estado de archivo


Ningn cdigo situado en la ubicacin del subcampo *STATUS que sea mayor que 99 es considerado como una excepcin o error. Si el cdigo de estado es mayor que 99, el indicador de errores si est especificado en las posiciones 73 y 74 se activa o la funcin incorporada %ERROR si se especifica el ampliador E se establece para devolver 1. De lo contrario, la subrutina de excepciones/errores recibe el control. La ubicacin de *STATUS se actualiza despus de cada operacin de archivo. Puede utilizar la funcin incorporada %STATUS para obtener informacin sobre excepciones/errores. Devuelve el valor ms reciente establecido para el estado de archivo y de programa. Si se especifica un archivo, %STATUS devuelve el valor contenido en el campo *STATUS de la INFDS para el archivo especificado. Las siguientes tablas son un resumen de los cdigos colocados en la ubicacin de subcampo *STATUS para la estructura de datos de informacin de archivo:
Tabla 10. Cdigos normales
Cdigo 00000 00011 00012 00014 00015 D D Dispositivo1 RC Condicin Sin excepcin/error Fin de archivo en una lectura (entrada) Condicin sin registros encontrados en las operaciones CHAIN, SETLL y SETGT Registro de salida de archivo local truncado Registro de entrada de archivo local truncado

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

VisualAge RPG Consulta del lenguaje

Tabla 11. Cdigos de excepcin/error


Cdigo 01011 Dispositivo1 D RC Condicin Tipo de registro no definido (el registro de entrada no coincide con el indicador identificador de registros) Ha intentado escribir un registro que ya existe (el archivo que se utiliza tiene claves exclusivas y la clave est duplicada) Error de restriccin referencial detectado en el miembro de archivo Error de secuencia al cargar matriz/tabla Error de secuencia al cargar matriz/tabla Excesivas entradas en el archivo de matriz/tabla Operacin de E/S en un archivo cerrado Se ha emitido OPEN en un archivo ya abierto Error en una operacin OPEN/CLOSE implcita. Error en una operacin OPEN/CLOSE explcita. Registro ya bloqueado Se ha intentado operacin de actualizacin sin lectura previa Imposible asignar el registro debido a un error de restriccin referencial Error en archivo SPECIAL Error en las entradas de espacio y salto de PRTCTL Otro error de E/S detectado. En los archivos locales, este mensaje contiene uno de los siguientes identificadores: v *LF0001: No se pudo abrir el archivo v *LF0002: No se pudo cerrar el archivo v *LF0003: Resultado de E/S inesperado v *LF0004: No se pudo establecer puntero de archivo v *LF0005: La lectura ha fallado v *LF0006: La escritura ha fallado v *LF0007: No se pudo determinar el tamao del archivo v *LF0008: No se pudo ajustar el tamao del archivo v *LF0009: No se pudo copiar el archivo v *LF0010: No se pudo suprimir el archivo v *LF0011: El archivo designado como local durante la compilacin ha resultado ser un archivo remoto durante la ejecucin

01021

01022 01041 01042 01051 01211 01215 012162 012172 01218 01221 01222 01231 01235 01299

D n/d n/d n/d todos todos todos todos D D D SP P D,P

Captulo 5. Manejo de excepciones y errores

47

Tabla 11. Cdigos de excepcin/error (continuacin)


Cdigo
1

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.

Excepciones y errores de programa


Estos son algunos ejemplos de errores y excepciones de programa: divisin por cero, SQRT de un nmero negativo, ndice de matriz no vlido, error en una CALL, devolucin de un error desde un programa invocado y una posicin de inicio o una longitud fuera del lmite de una operacin de series. Estas excepciones/errores se pueden manejar de una de las siguientes maneras: v Se puede especificar un indicador en las posiciones 73 y 74 de las especificaciones de clculo para algunos cdigos de operacin. Este indicador se activa si se produce una excepcin o error durante el proceso de la operacin especificada. La estructura de datos de estado de programa opcional se actualiza con la informacin de excepcin/error. Comprobando el indicador podr determinar la accin que emprender. v Se puede especificar el ampliador de cdigo de operacin E para algunos cdigos de operacin. 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 programa. La estructura de datos de estado del programa opcional se actualiza con la informacin de excepcin/error. Comprobando %ERROR y %STATUS podr determinar la accin que efectuar. v Codificando *PSSR en el factor 1 de una operacin BEGSR se puede especificar una subrutina de excepcin/error. La informacin correspondiente a la excepcin/error de programa est disponible mediante la estructura de datos de estado del programa que se especifica con una S en la posicin 23 de la sentencia de la estructura de datos en las especificaciones de definicin. v Si el indicador, el ampliador E, o la subrutina de excepcin/error de programa no est, el gestor de errores por omisin manejar las excepciones y errores de programa.

Estructura de datos de estado de programa


Para poner a disposicin de un programa VisualAge RPG la informacin de excepcin y error de programa, puede definir una estructura de datos de estado del programa. Una estructura de datos se define como una estructura de datos de estado del programa mediante una S en la posicin 23 de la sentencia de estructura de datos. Una estructura de datos de estado del programa contiene subcampos que proporcionan informacin acerca de la excepcin o error de programa que se ha producido. La ubicacin de estos subcampos se define mediante palabras clave especiales o mediante posiciones Desde y A predefinidas. A fin de acceder a los subcampos, asigne un nombre a cada subcampo. Es necesario especificar las palabras clave, ajustadas a la izquierda entre las posiciones 26 y 39. La Tabla 12 en la pgina 49 proporciona el diseo de los subcampos de la estructura de datos y de las posiciones Desde y A de sus subcampos.

48

VisualAge RPG Consulta del lenguaje

Tabla 12. Contenido de la estructura de datos de estado del programa


De (Pos. 26-32) 1 11 16 21 29 A (Pos. 33-39) 10 15 20 28 36 Formato Carcter Decimal con zona Decimal con zona Carcter Carcter Longitud Palabra clave 10 5.0 5.0 8 8 *ROUTINE *PROC *STATUS Informacin Nombre de componente lgico Cdigo de estado Cdigo de estado anterior Nmero de lnea de listado fuente Nombre de la rutina donde se produjo la excepcin o error. Este subcampo se actualiza al principio de una rutina o despus de una llamada de programa nicamente cuando el subcampo *STATUS se actualiza con un valor no cero. Estos son los nombres que identifican las rutinas: *INIT *TERM Finalizacin del programa *ROUTINE Nombre del programa o procedimiento llamado (primeros 8 caracteres). 37 40 39 42 Decimal con zona Carcter 3.0 3 *PARMS Nmero de parmetros pasados a este programa desde un programa de llamada Tipo de excepcin: CPF en una excepcin del sistema OS/400, MCH en una excepcin de mquina o *RT en un cdigo de retorno de error desde una rutina de ejecucin. En una excepcin de Windows, este campo contiene *EX. Nmero de excepcin: En una excepcin CPF, este campo contiene un nmero de mensaje CPF. En una excepcin de mquina, contiene un nmero de excepcin de mquina. En una excepcin de Windows, este campo contiene el nmero de excepcin en formato 9.0 binario. El cdigo de retorno de error desde una rutina de ejecucin de VisualAge RPG tambin se encuentra en este campo, en formato 9.0 binario. Reservado Datos de excepcin recuperados. Los mensajes de AS/400 estn situados en este subcampo Reservado Fecha (formato *DATE) en la que se entr el trabajo en el sistema.La fecha que este valor representa es la misma que est representada por las posiciones de la 270 a la 275. Inicializacin del programa

43

46

Carcter

47 91 171 191

90 170 190 198 Carcter Carcter

44 80 20 8

Captulo 5. Manejo de excepciones y errores

49

Tabla 12. Contenido de la estructura de datos de estado del programa (continuacin)


De (Pos. 26-32) 199 A (Pos. 33-39) 200 Formato Decimal con zona Longitud Palabra clave 2.0 Informacin Primeros 2 dgitos de un ao de 4 dgitos. Es lo mismo que los 2 primeros dgitos de *YEAR.Este campo se aplica a la parte correspondiente al siglo de la fecha que hay en las posiciones de la 270 a la 275. Por ejemplo, si la fecha fuese 1999-06-27, UDATE sera 990627 y el campo de siglo sera 19. El valor de este campo junto con el valor de las posiciones de la 270 a la 275 combina la informacin del valor de las posiciones de la 191 a la 198. Nota: El campo de siglo no se aplica a las fechas situadas en las posiciones de 276 a la 281 ni a las situadas en las posiciones de la 288 a la 293. Nombre del archivo en el que se produjo la ltima operacin de archivo (actualizada nicamente cuando se produce un error) Informacin de estado sobre el ltimo archivo utilizado. Esta informacin incluye el cdigo de estado, el cdigo de operacin, el nombre de la rutina de VisualAge RPG, el nmero de lnea del listado fuente y el nombre de registro. nicamente se actualiza cuando se produce un error. Nota: El nombre del cdigo de operacin est en el mismo formato que *OPCODE en la INFDS. Reservado Identificador de usuario de conexin al sistema principal de AS/400 para una operacin de apertura de archivo remoto. Este valor slo se actualiza cuando se accede a un sistema principal distinto con un identificador de usuario de conexin diferente. Reservado Fecha (en formato UDATE) de inicio de la ejecucin del programa en el sistema (UDATE deriva de esta fecha). En el apartado Palabras especiales de fecha de usuario en la pgina 7 hallar una descripcin de UDATE. Este valor recibe habitualmente el nombre de fecha del trabajo. La fecha que este valor representa es la misma que est representada por las posiciones de la 191 a la 198. Fecha de la ejecucin del programa (la fecha del sistema 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.

201

208

Carcter

209

243

Carcter

35

244 254

253 263 Carcter

10 10

264 270

269 275 Decimal con zona

10 6.0

276

281

Decimal con zona

6.0

50

VisualAge RPG Consulta del lenguaje

Tabla 12. Contenido de la estructura de datos de estado del programa (continuacin)


De (Pos. 26-32) 282 A (Pos. 33-39) 287 Formato Decimal con zona Longitud Palabra clave 6 (posiciones de decimales cero) 6 Informacin Hora de ejecucin del programa en formato hhmmss

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

294 300 304 314

299 303 313 429

Carcter Carcter Carcter

6 4 10 116

Cdigos de estado de programa


Ningn cdigo situado en la ubicacin del subcampo *STATUS que sea mayor que 99 es considerado como una condicin de excepcin o error. Si el cdigo de estado es mayor que 99, el indicador de errores si est especificado en las posiciones 73 y 74 se activa o la funcin incorporada %ERROR si se especifica el ampliador E se establece para devolver 1. De lo contrario, la subrutina de excepcin/error de programa recibe el control. *STATUS se actualiza cuando se produce una excepcin o error. La funcin incorporada %STATUS devuelve el ms reciente establecido para el estado de programa y de archivo. Los siguientes cdigos estn situados en la ubicacin de subcampo *STATUS para la estructura de datos de estado de programa: Cdigos normales: Cdigo Condicin 00000 00031 00032 00033 No se produjeron excepciones/errores El componente lgico est terminando: indicador LR activado cuando se efecta una operacin RETURN o ENDACT El componente lgico est terminando como resultado de una terminacin explcita del componente lgico (componente lgico STOP) El componente lgico est terminando como resultado de una terminacin implcita del componente lgico (STOP padre o abuelo del componente lgico) El componente lgico est terminando como resultado de una peticin de terminacin explcita de otro componente lgico (componente lgico STOP)
Captulo 5. Manejo de excepciones y errores

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

VisualAge RPG Consulta del lenguaje

00432 00501 00802 00803 00804 00805 00907 00940 00970

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

Ejemplo de estructura de datos de estado de programa


Para especificar una estructura de datos de estado de programa (PSDS) en el programa, codifique la estructura de datos de estado de programa y los subcampos que desea utilizar en una especificacin de definicin.

Captulo 5. Manejo de excepciones y errores

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*

Figura 13. Ejemplo de codificacin de una PSDS

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.

Subrutina de excepcin y error de programa


Para identificar la subrutina que recibe el control cuando se produce una excepcin o error de programa, especifique *PSSR en el factor 1 de la operacin BEGSR de la subrutina. Si no se especifica un indicador en las posiciones 73 y 74 en un cdigo de operacin o si se produce una excepcin inesperada en un cdigo de operacin (por ejemplo, un error de indexacin de matrices durante una operacin SCAN), cuando se produce una excepcin o error de programa el control se transfiere a esta subrutina. Adems, la operacin EXSR tambin puede llamar a la subrutina. Se puede especificar *PSSR en la palabra clave INFSR en las especificaciones de descripcin de archivo y recibe el control si se produce una excepcin/error de archivo. En la subrutina de excepcin/error de programa se pueden utilizar todos los cdigos de operacin. La operacin ENDSR debe ser la ltima especificacin de la subrutina y la entrada del factor 2 en la operacin ENDSR especifica el punto de retorno que sigue a la ejecucin de la subrutina. Para obtener ms informacin, consulte el apartado Subrutina de excepcin y error de archivo (INFSR) en la pgina 44. Recuerde los siguientes aspectos al especificar una subrutina de excepcin/error de programa: v Puede llamar explcitamente a la subrutina *PSSR especificando *PSSR en el factor 2 de la operacin EXSR. v Una vez ejecutada la operacin ENDSR de la subrutina *PSSR, el campo, subcampo, elemento de matriz o elemento de matriz especificado en el factor 2 se restablece en blancos. Esto le permitir especificar el punto de retorno dentro

54

VisualAge RPG Consulta del lenguaje

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.

Excepciones/errores de componente lgico


En los apartados siguientes se describe cmo majar los errores durante un evento y cules son las excepciones detectadas por el gestor de excepciones de VisualAge RPG.

Cdigos de estado de componente lgico


Los siguientes valores *STATUS le permiten consultar cmo ha terminado el componente lgico en la terminacin normal: 00031 El componente lgico termina porque LR est activo. LR se comprueba cuando se alcanza ENDACT de raz. La subrutina de accin de raz es la subrutina de la parte inferior (o primera) de cualquier subrutina de accin jerarquizada. El componente lgico se termina a s mismo directamente. Por ejemplo, el componente lgico thiscomp emite thiscomp de STOP. El componente lgico thiscomp ha terminado. El componente lgico se termina a s mismo indirectamente. Por ejemplo, myparent de STOP es emitido por el componente lgico actual para terminar el componente lgico que inici (START) el componente lgico actual. Todos los hijos de myparent se terminan en primer lugar, incluido el componente lgico actual. El componente lgico es terminado directamente por otro componente lgico. Por ejemplo, X de STOP es emitido por otro componente lgico para terminar el componente lgico actual, X. El componente lgico es terminado indirectamente por otro componente lgico. Por ejemplo, myparent de STOP es emitido por otro componente lgico para terminar el padre del componente lgico actual, myparent, e indirectamente, el componente lgico actual tambin ha sido terminado.

00032

00033

00034

00035

Captulo 5. Manejo de excepciones y errores

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

Manejo de errores de evento


Si se produce un error durante el manejo de un evento, puede ocurrir una de estas dos cosas: v Si no hay una *PSSR o una INFSR, se invoca al gestor de excepciones por omisin. v Si hay una rutina de manejo de errores (*PSSR o INFSR), se invoca a la rutina de manejo de errores. Si la aplicacin contiene una subrutina de manejo de errores, esta subrutina sigue ejecutndose hasta que se alcanza uno de los siguientes cdigos de operacin: RETURN El control vuelve al mismo lugar donde se produce el proceso *DEFAULT de ENDACT. Si no hay ms subrutinas de accin jerarquizadas, se comprueba LR: v Si LR est activado, el componente lgico termina normalmente. Consulte el apartado Terminacin normal en la pgina 30. v Si LR no est activado, la subrutina de accin actual finaliza y se ejecuta cualquier accin por omisin para el evento. El componente lgico termina normalmente. Se aplican algunas restricciones. Consulte el Captulo 4. Trabajar con componentes lgicos en la pgina 29. Lo que especifique en el factor 2 afecta al flujo de ejecucin: v Si no se especifica el factor 2, se visualiza la ventana de informacin de mensajes de consulta del gestor de excepciones por omisin. v Si se especifica *DEFAULT en el factor 2, el control vuelve al mismo lugar donde se produce el proceso *DEFAULT ENDACT. Si no hay ms subrutinas de accin jerarquizadas, se comprueba LR: Si LR est activado, el componente lgico termina normalmente. Consulte el apartado Terminacin normal en la pgina 30. Si LR no est activado, la subrutina de accin actual finaliza y se ejecuta cualquier accin por omisin para el evento. v Si se especifica *NODEFAULT en el factor 2, el control vuelve al mismo lugar donde se produce el proceso *NODEFAULT ENDACT. Consulte el apartado ENDSR (Fin de subrutina de usuario) en la pgina 445. Si no hay ms subrutinas de accin jerarquizadas, se comprueba LR: Si LR est activado, el componente lgico termina normalmente. Consulte el apartado Terminacin normal en la pgina 30.

STOP

ENDSR

56

VisualAge RPG Consulta del lenguaje

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

Captulo 5. Manejo de excepciones y errores

57

WINDOW2+CREATE+WINDOW2 y el control vuelve a BUTTON1+CLICK+WINDOW1 en la operacin siguiente de SHOWWIN WINDOW2.

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

VisualAge RPG Consulta del lenguaje

Captulo 6. Subprocedimientos y prototipos


De una compilacin puede surgir un objeto destino de tres tipos posibles. El resultado depende de la palabra clave de especificacin de control utilizada: v Cuando las palabras clave NOMAIN y EXE no estn presentes, se crea un componente lgico. v Cuando se especifica la palabra clave NOMAIN, se crea un programa de utilidad DLL o NOMAIN. Esta DLL contiene solamente subprocedimientos RPG. v Cuando se especifica la palabra clave EXE, se crea un RPG EXE. Este mdulo contiene un procedimiento principal y subprocedimientos. Un programa de VisualAge RPG consta de uno o varios mdulos. Un procedimiento es cualquier parte del cdigo que puede llamarse con el cdigo de operacin CALLP. VisualAge RPG tiene dos clases de procedimientos: procedimiento principal y subprocedimiento. Un procedimiento principal es un procedimiento que puede especificarse como el procedimiento de entrada del programa y que recibe el control cuando se llama por primera vez. Tenga en cuenta que un procedimiento slo se genera al crear un EXE. Un subprocedimiento es un procedimiento especificado despus de la seccin fuente principal. (Consulte el apartado Ubicacin de definiciones y mbito en la pgina 228 para el conocer el diseo de la seccin fuente principal de cada tipo de destino de compilacin). Los subprocedimientos se diferencian de un procedimiento principal en que: v No se puede acceder a los nombres definidos en un subprocedimiento desde fuera del subprocedimiento. v Se debe hacer un prototipo de la interfaz de llamada. v Las llamadas a los procedimientos deben ser llamadas de procedimiento enlazado. v Slo se pueden utilizar las especificaciones P, D y C. Todos los subprocedimientos deben tener un prototipo correspondiente en las especificaciones de definicin de la seccin fuente principal. El compilador utiliza el prototipo para llamar correctamente al programa o procedimiento y para asegurar que el llamador pasa los parmetros correctos. Esta seccin trata los aspectos siguientes de los subprocedimientos: v Definicin de subprocedimiento v Mdulos NOMAIN y EXE v Comparacin con subrutinas

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.

Copyright IBM Corp. 1994, 2000

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 *

Figura 14. Ejemplo de un subprocedimiento

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

VisualAge RPG Consulta del lenguaje

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.

Definicin de interfaz de procedimiento


Si un procedimiento con prototipo tiene parmetros de llamada o un valor de retorno, debe tener una definicin de interfaz de procedimiento. Una definicin de interfaz de procedimiento es una repeticin de la informacin del 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). Puede especificar una interfaz de procedimiento indicando PI en la entrada Tipo de definicin (posiciones 24-25). Las definiciones de parmetros, indicadas mediante espacios en blanco en las posiciones 24-25, deben ir inmediatamente a continuacin de la especificacin PI. La definicin de interfaz de procedimiento finaliza con la primera especificacin de definicin que no tenga espacios en blanco en las posiciones 24-25 o por una especificacin no de definicin. Para obtener ms informacin sobre las definiciones de interfaz de procedimiento, consulte el apartado Interfaz de procedimiento en la pgina 70.

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.

Captulo 6. Subprocedimientos y prototipos

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

VisualAge RPG Consulta del lenguaje

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.

Captulo 6. Subprocedimientos y prototipos

63

Inicio

Primera vez que se carga la DLLo cuando se llama al EXE.

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 automticas

Es la primera vez que se ha llamado al subprocedimiento?

Inicializar variables estticas Almacenar variables para operaciones RESET en variables locales

No

Operacin de retorno

Efectuar clculos una vez

Establecer valor para llamador (si el subprocedimiento devuelve un valor)

Si el subprocedimiento devuelve un valor, se efectu una operacin RETURN? No Sealizar excepcin a llamador (el subprocedimiento finaliza)

Devolver a llamador

Figura 15. Secuencia del proceso normal de un subprocedimiento

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

VisualAge RPG Consulta del lenguaje

Excepcin durante clculos

Error de programa y subprocedimiento tienen *PSSR? No Excepcin de filtracin (el subprocedimiento finaliza)

Ejecutar subrutina *PSSR

Ha llegado *PSSR a ENDSR? S Sealizar excepcin a llamador (el subprocedimiento finaliza)

No

El programa contina normalmente despus de RETURN o GOTO

Figura 16. Gestin de excepciones/errores para un subprocedimiento

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.

Captulo 6. Subprocedimientos y prototipos

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

VisualAge RPG Consulta del lenguaje

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:

Captulo 6. Subprocedimientos y prototipos

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 '

Figura 17. Prototipo para CVTCHR

Parmetros con prototipo


Si la interfaz de llamada con prototipo incluye el paso de parmetros, debe definir el parmetro inmediatamente despus de la especificacin PR. Las palabras clave siguientes, que se aplican a la definicin del tipo, se permiten en las especificaciones de definicin de parmetros:

68

VisualAge RPG Consulta del lenguaje

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

Captulo 6. Subprocedimientos y prototipos

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

VisualAge RPG Consulta del lenguaje

Captulo 7. Soporte SQL


Si su aplicacin de VisualAge RPG contiene sentencias de Lenguaje Estructurado (SQL) para acceder a las bases de datos DB2, deber realizar las tareas siguientes: 1. Instale DB2 y configure el acceso. En los manuales Base de datos universal DB2 Edicin Personal: Inicio rpido, SC10-3156 (S10J-8150) y DB2 Universal Database for Windows NT Quick Beginnings, S10J-8149, as como en 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 este sitio Web http://publib.boulder.ibm.com/pubs/html/as400/infocenter.htm), se explica cmo instalar y configurar los productos DB2 en estaciones de trabajo y en sistemas AS/400. En Instalacin de VisualAge RPG y CODE/400 para AS/400, SC10-3064-03 (SC09-2446-03) se explica un mtodo que sirve para configurar el acceso a una base de datos de AS/400. 2. Codifique las sentencias SQL en el programa fuente. En el apartado Reglas sintcticas generales se explica la manera de codificar una sentencia SQL en un programa VisualAge RPG. 3. Construya la aplicacin. En la ayuda en lnea de dilogo Opciones de construccin del Diseador GUI se indica qu opciones de construccin pueden seleccionarse para los programas VisualAge RPG con sentencias SQL. Para obtener informacin adicional sobre cmo construir, ejecutar y conectarse a una base de datos, consulte los apartados Construccin de una aplicacin en la pgina 78, Ejecucin de una aplicacin en la pgina 78 y Conexin a una base de datos en la pgina 79. 4. Empaquete e instale la aplicacin de usuario. En la publicacin Programacin con VisualAge para RPG, SC10-3067-02 (SC09-2449-02) se explica cmo empaquetar e instalar una aplicacin VisualAge RPG. El soporte SQL incorporado de VisualAge RPG difiere de la mayor parte de implementaciones restantes en cuanto no existe un precompilador separado para crear el archivo intermedio que posteriormente se compilar. Las sentencias SQL incorporadas se manejan durante el paso de compilar del proceso de construccin. La aplicacin puede ser construida para utilizar bases de datos locales, bases de datos en otros nodos de la estacin de trabajo o bases de datos en otros servidores AS/400. Se examinan las diferencias en el nivel de SQL soportado en estos otros sistemas con el nivel de SQL soportado en la estacin de trabajo donde se ha construido. nicamente se permite la sintaxis soportada por DB2 en la estacin de trabajo durante la construccin. Si traslada la aplicacin a otra estacin de trabajo, la aplicacin slo se puede ejecutar en el mismo nivel o en un nivel superior de DB2. Nota: VisualAge RPG da soporte al nivel de funcin definido en DB2/2 V1.2. Se pueden utilizar los releases ms recientes de DB2/2 si en la aplicacin slo se utilizan las funciones de V1.2.

Reglas sintcticas generales


Las reglas siguientes indican cul es la sintaxis de las sentencias SQL incluidas en los programas fuente VisualAge RPG: 1. Las sentencias SQL se codifican en las especificaciones de clculo. Las sentencias siguientes son excepciones y se pueden codificar en cualquier lugar
Copyright IBM Corp. 1994, 2000

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.

En el ejemplo siguiente se ilustran las reglas sintcticas generales:


----+-*--1----+----2----+----3----+----4----+----5----+----6----+ C/EXEC SQL WHENEVER SQLERROR GO TO ERRLAB C/END-EXEC C/EXEC SQL -- principio de sentencia SQL C+ SELECT * * ste es un comentario RPG normal C+ INTO :hvar1, -- var sist pral uno C+ :hvar2 -- var sist pral dos C+ FROM TABLEX C+ WHERE NAME='TESTING' C/END-EXEC

Figura 18. Reglas sintcticas generales para las sentencias SQL

Declaraciones de variables del lenguaje principal


Se permiten las sentencias SQL BEGIN DECLARE y END DECLARE en los programas de VisualAge RPG, no obstante dichas sentencias se ignoran. Todas las variables declaradas son consideradas variables candidatas del lenguaje principal. Las variables del lenguaje principal se identifican por el signo de dos puntos que las precede en una sentencia SQL. Los tipos de datos soportados para las variables del lenguaje principal son datos de tipo carcter, de tipo carcter de longitud variable, grficos, decimales empaquetados enteros, decimales con zona, numricos, numricos binarios, fecha, hora e indicacin de la hora. Los tipos de datos SQL REAL, DOUBLE y VARCHAR no estn soportados. La siguiente tabla da un resumen de cmo los tipos de datos de VisualAge RPG se asignan a los tipos de datos SQL.

72

VisualAge RPG Consulta del lenguaje

Tabla 13. Tipos de datos de sistema principal


Tipo de datos de VARPG Binario de 4 dgitos Binario de 9 dgitos Decimal empaquetado Carcter Grfico Decimal con zona Tipo de datos de SQL SMALLINT INTEGER DECIMAL(m,n) CHAR(m) GRAPHIC(m) DECIMAL(m,n) Descripcin Entero sealado de 16 bits Entero sealado de 32 bits Tipo de datos numrico RPG por omisin Carcter de longitud fija Serie DBCS de longitud fija Nmero de coma fija Mximo de 254 caracteres Mximo de 127 caracteres Convertido a decimal empaquetado por RPG antes o despus de la operacin de DB2. Los siguientes formatos estn soportados por DB2: *ISO, *USA, *EUR, *JIS. Otros formatos RPG son convertidos por RPG antes o despus de la operacin de DB2. Los siguientes formatos estn soportados por DB2: *ISO, *USA, *EUR, *JIS. Otros formatos RPG son convertidos por RPG antes o despus de la operacin de DB2. Notas Sin decimales Sin decimales

Fecha

DATE

Fecha

Hora

TIME

Hora

Indicacin de la hora TIMESTAMP

Indicacin de la hora

Reglas de las variables del lenguaje principal


A continuacin se describen las reglas para las variables del lenguaje principal: 1. Las variables del lenguaje principal pueden ser cualquier campo de carcter escalar, numrico, de fecha, de hora, de indicacin de la hora o DBCS definido en el programa. Las variables del lenguaje principal no pueden tratarse de ninguno de los siguientes casos: v Estructuras de datos de mltiples apariciones v Nombres de campo de indicador (*INxx) v Tablas v UDATE, UDAY, UMONTH, UYEAR 2. Las matrices indexadas no se permiten como variables del lenguaje principal. 3. Todos los tipos de datos numricos en SQL son compatibles y se producen las conversiones adecuadas el tipo de la variable del lenguaje principal no coincide con la definicin de columna. Esto incluye las columnas de bases de datos en notacin cientfica (FLOAT). Recibir un mensaje que indicar el truncamiento. 4. Todos los tipos de datos de carcter en SQL son compatibles y se producen las conversiones adecuadas cuando el tipo de la variable del lenguaje principal no coincide exactamente con la definicin de columna. SQL realizar las conversiones adecuadas entre el dato de tipo carcter de longitud fija y el de longitud variable. Recibir un mensaje que indicar el truncamiento. 5. Todos los tipos de datos DBCS en SQL son compatibles y se producen las conversiones adecuadas cuando el tipo de la variable del lenguaje principal no coincide exactamente con la definicin de columna. SQL realizar las conversiones apropiadas entro los datos DBCS de longitud fija y los de longitud variable. Recibir un mensaje que indicar el truncamiento. 6. Los campos de fecha, de hora y de indicacin de la hora en SQL son compatibles con los campos de tipo carcter. Por ejemplo, cuando una columna de fecha SQL es llevada a una variable del lenguaje principal de tipo carcter, es formateada utilizando el valor de formato Fecha/Hora especificado en la pgina de opciones de DB2 del cuaderno Construir.
Captulo 7. Soporte SQL

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.

Estructuras de datos como variables del lenguaje principal


Al especificar una estructura de datos como un a variable del lenguaje principal en una sentencia SQL, el nombre hace referencia a todos los subcampos de la estructura de datos. Esta manera es adecuada para especificar una larga lista de variables del lenguaje principal. La Figura 19 ilustra el cdigo fuente si no se utiliza una estructura de datos mientras que la Figura 20 ilustra el cdigo fuente si se utiliza una estructura de datos.
----+-*--1----+----2----+----3----+----4----+----5----+----6----+ C/EXEC SQL C+ SELECT * C+ INTO :F1, :F2, :F3, :F4, :F5, :F6, :F7 C+ FROM TABLEX C+ WHERE NAME='GASPARE' C/END-EXEC

Figura 19. Codificacin de variables del lenguaje principal sin utilizar una estructura de datos

Utilizando la estructura de datos:


----+-*--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 * C/EXEC SQL C+ SELECT * C+ INTO :ROW C+ FROM TABLEX C+ WHERE NAME='GASPARE' C/END-EXEC

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.

Variables de indicador y estructuras


Si las variables de indicador son necesarias (por ejemplo, a causa de las columnas nulas), se puede especificar una matriz numrica binaria breve junto con el nombre de la estructura del lenguaje principal.

74

VisualAge RPG Consulta del lenguaje

----+-*--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

Figura 21. Variables de indicador y estructuras

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.

Reglas de la estructura del lenguaje principal


A continuacin se describen las reglas para las estructuras del lenguaje principal: v Una nica sentencia SQL puede contener una o ms estructuras del lenguaje principal. v La estructura de datos debe contener subcampos a fin de poder ser reconocida como una estructura del lenguaje principal. Una estructura de datos sin subcampos es considerada un campo normal de carcter. v Los nombres de estructura del lenguaje principal pueden ir seguidos inmediatamente por una matriz de indicador, que se trata de una matriz numrica binaria sin decimales. Cada elemento de la matriz corresponde a un subcampo de la estructura de datos.

Sentencia /EXEC SQL INCLUDE


La sentencia /EXEC SQL INCLUDE puede aparecer en cualquier parte del programa antes de la seccin de datos de la hora de compilacin (** en las posiciones 1-2). El nombre de archivo se especifica mediante un nico nombre. La extensin de archivo por omisin es VPG. Nota: El nombre de archivo slo puede hacer referencia a un archivo local.

Sentencia /EXEC SQL INCLUDE SQLCA


Una estructura de datos SQLCA se incluye automticamente en el programa de VisualAge RPG cuando el proceso de la base de datos se ha especificado en la pgina de opciones DB2 del cuaderno de Construccin. Se incluye la estructura de datos incluso cuando la sentencia INCLUDE SQLCA no se ha especificado. Puede utilizar la estructura de datos SQLCA para consultar el resultado de cada sentencia SQL despus de que haya sido ejecutada.

Captulo 7. Soporte SQL

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

Figura 22. Expansin fuente de la estructura de datos SQLCA

Sentencia /EXEC SQL WHENEVER


La sentencia /EXEC SQL WHENEVER determina qu manejo de errores se realiza despus de ejecutar las sentencias SQL. La Figura 23 ilustra la sintaxis de la sentencia /EXEC SQL WHENEVER.
C/EXEC SQL WHENEVER <condicin> <accin> C/END-EXEC

Figura 23. Sintaxis de la sentencia SQL WHENEVER

Nota: La <condicin> es SQLWARNING, SQLERROR o NOT FOUND. La <accin> es GOTO <nombre-etiqueta>, GO TO <nombre-etiqueta> o CONTINUE.

76

VisualAge RPG Consulta del lenguaje

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

Figura 24. Mensajes de error utilizando SQL WHENEVER

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.

Sentencia /EXEC SQL BEGIN DECLARE


El compilador ignora la sentencia /EXEC SQL END DECLARE, aunque no ignora las sentencias que hay en medio. La Tabla 14 describe cmo asignar los tipos de datos SQL en los tipos de datos de VisualAge RPG.
Tabla 14. Asignacin de tipos SQL a las variables del lenguaje principal
Tipo de datos de SQL Tipo de datos de VARPG Formato de datos Longitud (Bytes) (pos 43) SMALLINT INTEGER Binario de 4 dgitos Binario de 9 dgitos B B (pos 44-51) (pos 52) 2 4 0 0 Posiciones decimales

Captulo 7. Soporte SQL

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

Manejo de errores durante la ejecucin


Si una sentencia SQL falla, no se emiten mensajes durante la ejecucin. Deber codificar una sentencia SQL WHENEVER o comprobar explcitamente el valor SQLCOD a fin de detectar esos errores.

Construccin de una aplicacin


Para construir una aplicacin que contenga el SQL incorporada, deber especificar las siguientes opciones en el cuaderno de Construccin: v Nombre de base de datos DB2 v Un nombre de Paquete o un nombre de Archivo de enlace Para obtener ms informacin, consulte la publicacin Programacin con VisualAge para RPG, SC10-3067-02 (SC09-2449-02). El nombre de la base de datos que especifique deber estar catalogado en la estacin de trabajo. Deber tener la autoridad adecuada para utilizar la base de datos. Cuando empiece a construir una aplicacin, se inicia automticamente el Gestor de base de datos DB2 (el proceso de construccin emite el mandato DB2START). No obstante, si construye la aplicacin desde un entorno de cliente, usted mismo deber iniciar el gestor de base de datos en el servidor. Para conectarse a la base de datos automticamente durante la compilacin, primero deber especificar un ID de usuario y una contrasea vlidos en la pgina de conexin a DB2 del cuaderno de Opciones de construccin. En posteriores construcciones, VARPG utilizar esta informacin para conectarse a la base de datos. Antes de que la aplicacin pueda ejecutarse, deber crear un paquete. Un paquete es un objeto almacenado en la base de datos que incluye informacin para ejecutar el SQL incorporado en la aplicacin o programa. Si el paquete se crea durante la construccin, esto es construir con enlace habilitado. Esto permite que la aplicacin slo acceda a la base de datos utilizada durante la construccin. Si la aplicacin se construye con el enlace diferido, se crea un archivo de enlace y la aplicacin puede acceder a muchas bases de datos.

Ejecucin de una aplicacin


Para ejecutar una aplicacin que contenga el SQL incorporado, debern existir las siguientes condiciones:

78

VisualAge RPG Consulta del lenguaje

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.

Conexin a una base de datos


Antes de que la aplicacin pueda acceder a una base de datos, deber tener una conexin a dicha base de datos. Podr realizar la conexin utilizando la sentencia CONNECT TO o utilizando una conexin implcita.

Utilizacin de la sentencia CONNECT TO


Puede especificar el nombre de la base de datos a la que desea conectarse utilizando la sentencia CONNECT TO en la aplicacin. Por ejemplo,
C\EXEC SQL CONNECT TO LATONA C\END-EXEC

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.

Utilizacin de una conexin implcita


Puede establecer una conexin implcita a la base de datos estableciendo la variable de entorno SQLDBDFT para indicar a la base de datos que desea conectarse implcitamente. Por ejemplo,
SET SQLDBDFT=LATONA

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

VisualAge RPG Consulta del lenguaje

Captulo 8. Consideraciones sobre archivos


En este apartado se describe cmo utilizar los archivos en un programa de VisualAge RPG. El programa puede utilizar los archivos DISK, PRINTER y SPECIAL: v Archivos DISK: Los archivos DISK pueden ser remotos o locales Los archivos DISK remotos deben estar descritos externamente. Los archivos DISK locales deben estar descritos por programa. v Archivos PRINTER: Se permite un mximo de ocho archivos PRINTER Los archivos PRINTER deben estar descritos por programa Los archivos PRINTER deben ser locales v Archivos SPECIAL: Los archivos SPECIAL deben estar descritos por programa Los archivos SPECIAL deben ser locales Para obtener ms informacin sobre cmo especificar los archivos, consulte los apartados siguientes: v Captulo 17. Especificaciones de descripcin de archivo en la pgina 213 v Captulo 18. Especificaciones de definicin en la pgina 227 v Captulo 19. Especificaciones de entrada en la pgina 267 v Captulo 21. Especificaciones de salida en la pgina 289.

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.

Compartir la va de acceso de datos abierta de archivos AS/400


No est soportado compartir vas de acceso de datos abiertas. Si una aplicacin de VisualAge RPG contiene un mandato OPNQRYF CL, entonces la va de acceso de datos abierta asociada al mandato OPNQRYF no puede ser compartida por los archivos abiertos en la aplicacin de VisualAge RPG. Si la aplicacin de VisualAge RPG llama a un programa que utiliza el mandato OPNQRYF, se puede compartir la va de acceso de datos abiertos. Cada apertura realizada por la aplicacin de VisualAge RPG crea una va de acceso de datos abierta exclusiva. Mltiples aperturas del mismo archivo de base de datos dentro de la misma aplicacin de VisualAge RPG da como resultado distintas instancias del archivo, cada una con su propia va de acceso de datos abierta. Puede abrir el mismo archivo de base de datos ms de una vez utilizando diferentes nombres de alias para los archivos en el programa de VisualAge RPG para hacer referencia al mismo archivo de base de datos AS/400 real. Debe definir diversas pginas de archivo en el cuaderno Definir informacin de AS/400. Tambin puede abrir el mismo archivo de base de datos en distintos componentes lgicos de la aplicacin de VisualAge RPG.

Conversiones de datos de archivos de AS/400


Los datos se almacenan de forma distinta en el sistema AS/400 que en la estacin de trabajo. Po esta razn, el producto de VisualAge RPG convierte los datos si la aplicacin de VisualAge RPG llama a los programas de AS/400, accede a las reas de datos de AS/400 o accede a los archivos de base de datos de AS/400. Esta conversin garantiza que los datos estn correctamente representados tanto en la estacin de trabajo como en el servidor AS/400. Si se pasa una estructura de datos como un parmetro a un llamada a un programa de AS/400 o si la estructura de datos representa un rea de datos de AS/400, cada subcampo es convertido basndose en su tipo de datos. Nota: A fin de que las conversiones de datos funcionen, todos los archivos de base de datos de AS/400 y los archivos TO/FROM deben estar descritos externamente. Las siguientes conversiones se realizan en los tipos de datos de VisualAge RPG:

82

VisualAge RPG Consulta del lenguaje

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.

En este ejemplo, este campo se convierte de la siguiente manera:


sbSODBSIsbSODBSI

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.

Control de compromiso de los archivos de la base de datos de AS/400


El control de compromiso de AS/400 le permite procesar un grupo de cambios de la base de datos como una unidad. Esta unidad puede aplicarse satisfactoriamente a la base de datos de AS/400 emitiendo una operacin commit. Los cambios asociados a la unidad pueden retrotraerse si no es posible aplicarlos satisfactoriamente como un grupo. La informacin que entre en el cuaderno Definir informacin de AS/400 le permite definir mltiples archivos de bases de datos de AS/400 para la aplicacin de VisualAge RPG. Dichos archivos pueden existir en diversos servidores de AS/400.

84

VisualAge RPG Consulta del lenguaje

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

VisualAge RPG Consulta del lenguaje

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.

Captulo 8. Consideraciones sobre archivos

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*

Figura 25. Utilizacin de archivos especiales (Pieza 1 de 2)


I* --------------------------------------------------------------C *INZSR BEGSR C* --------------------------------------------------------------C dinoplist PLIST C PARM mySFparm C EVAL fieldc = 'FIRSTINIT' C FIELDC DSPLY BoxId Reply 9 0 C*--------------------------------------------------------------------C OPEN dino 90 C 90'IND90' DSPLY BoxId Reply C 99'IND99' DSPLY BoxId Reply c*--------------------------------------------------------------------C N90 READ dino 9099 C*--------------------------------------------------------------------C N90FIELDC DSPLY BoxId Reply C 90'IND90' DSPLY BoxId Reply C 99'IND99' DSPLY BoxId Reply c*--------------------------------------------------------------------C CLOSE dino 90 C*--------------------------------------------------------------------C 90'IND90' DSPLY BoxId Reply C 99'IND99' DSPLY BoxId Reply C ENDSR

Figura 25. Utilizacin de archivos especiales (Pieza 2 de 2)

88

VisualAge RPG Consulta del lenguaje

#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 ;

Figura 26. Programa C para archivos especiales (Pieza 1 de 2)

Captulo 8. Consideraciones sobre archivos

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 }

Figura 26. Programa C para archivos especiales (Pieza 2 de 2)

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

VisualAge RPG Consulta del lenguaje

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

Figura 27. Abrir y cerrar archivos especiales implcitamente

Captulo 8. Consideraciones sobre archivos

91

92

VisualAge RPG Consulta del lenguaje

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

Copyright IBM Corp. 1994, 2000

93

94

VisualAge RPG Consulta del lenguaje

Captulo 9. Tipos de datos y formatos de datos


En este captulo se describen los tipos de datos soportados por VisualAge RPG y sus caractersticas especiales. Los tipos de datos soportados son: v Puntero de base v Carcter v Fecha v Grfico v Numrico v Puntero de procedimiento v Hora v Indicacin de la hora v UCS-2 Adems, algunos de los tipos de datos permiten distintos formatos de datos. En este apartado se indica las diferencias que existen entre los formatos de datos internos y externos, se describe cada formato y se explica cmo especificarlos.

Formatos internos y externos


Los campos numricos, de fecha y de indicacin de la hora tienen un formato interno independiente del formato externo. El formato interno es el modo en que los datos se almacenan en el programa. El formato externo es el modo en que los datos se almacenan en los archivos. Debe prestar atencin al formato interno al: v pasar parmetros por referencia v recubrir subcampos en estructuras de datos Adems, deber tener en cuenta el formato interno de los campos numricos cuando el rendimiento del tiempo de ejecucin de las operaciones aritmticas sea importante. Para obtener ms informacin al respecto, consulte el apartado Consideraciones sobre el rendimiento en la pgina 369. Hay un formato interno y externo por omisin para los tipos de datos numricos y de fecha/hora. Puede especificar un formato interno para un campo determinado en una especificacin de definicin. De forma similar, puede especificar un formato externo para un campo descrito en un programa en la especificacin de entrada o salida correspondiente. Para los campos de un archivo descrito externamente, el formato de datos externo se especifica en las especificaciones de descripcin de datos en la posicin 35. No puede cambiar el formato externo de los campos descritos externamente, con una excepcin. Si especifica EXTBININT en una especificacin de control, cualquier campo binario con cero posiciones decimales se tratar como si tuviera un formato externo entero. Para los subcampos de estructuras de datos descritas externamente, El compilador utiliza los formatos de datos especificados en la descripcin externa como los formatos internos de los subcampos.

Copyright IBM Corp. 1994, 2000

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.

Especificacin de un formato externo para un campo numrico


La tabla siguiente muestra cmo especificar el formato externo de campos numricos descritos por el programa. Para obtener ms informacin sobre cada tipo de formato, consulte el subapartado correspondiente de este apartado.
Tabla 15. Entradas y ubicaciones para especificar formatos externos
Tipo de campo Entrada Salida Matriz o tabla Especificacin Entrada Salida Definicin Utilizacin de Posicin 36 Posicin 52 Palabra clave EXTFMT

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

VisualAge RPG Consulta del lenguaje

+n.nnnnnnnE+ee, donde + representa el signo (+ o -) n representa los dgitos de la mantisa e representa los dgitos del exponente

El formato para datos flotantes de 8 bytes es:


+n.nnnnnnnnnnnnnnnE+eee

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.

Especificacin de un formato externo para un campo de caracteres, grfico o UCS-2


Para cualquiera de los campos de entrada y salida de Tabla 15 en la pgina 96, especifique uno de los siguientes formatos de datos externos vlidos: A N G C Carcter (vlido para datos de caracteres e indicadores) Indicador (vlido para datos de caracteres e indicadores) Grfico (vlido para datos grficos) UCS-2 (vlido para datos UCS-2)

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.

Especificacin de un formato externo para un campo de fecha/hora


Si tiene campos de fecha, hora e indicacin de la hora en archivos descritos por programas, debe especificar el formato externo de los campos. Puede especificar un formato externo para todos los campos de fecha, hora e indicacin de la hora en un archivo descrito por programa utilizando las palabras clave DATFMT y TIMFMT en una especificacin de descripcin de archivo. Tambin puede especificar un formato externo para un campo determinado. Especifique el formato deseado en las posiciones 31-34 de una especificacin de entrada. Especifique la palabra clave y el formato adecuados en las posiciones 53-80 de una especificacin de salida. Para obtener ms informacin sobre cada tipo de formato, consulte el apartado apropiado de este captulo.
Captulo 9. Tipos de datos y formatos de datos

97

Tipo de datos puntero de base


Los punteros de base se utilizan para ubicar el almacenamiento de las variables de base. Se accede al almacenamiento definiendo un campo, matriz o estructura de datos como basado en una variable de puntero de base determinado y estableciendo la variable del puntero de base de modo que seale a la ubicacin de almacenamiento necesaria. Por ejemplo, considere la variable de base MI_CAMPO, un campo de caracteres con una longitud 5, basada en el puntero PTR1. La variable de base no tiene una ubicacin fija en el almacenamiento. Debe utilizar un puntero para indicar la ubicacin actual del almacenamiento que contiene la variable. Suponga que el diseo de cierta rea del almacenamiento es el siguiente:
------------------------------------------------------------| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | -------------------------------------------------------------

Si establecemos el puntero PTR1 de modo que seale a G,


PTR1-------------------. | V ------------------------------------------------------------| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | -------------------------------------------------------------

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

VisualAge RPG Consulta del lenguaje

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.

Establecimiento de un puntero de base


La ubicacin de la variable basada se establece o se cambia estableciendo o cambiando el puntero de base de una de las siguientes maneras: v Inicializndola con INZ(%ADDR(FLD)) donde FLD es una variable no basada v Asignando el puntero al resultado de %ADDR(X) donde X es cualquier variable v Asignando al puntero el valor de otro puntero v Utilizando ALLOC o REALLOC (consulte los apartados ALLOC (Asignar almacenamiento) en la pgina 395 y REALLOC (Reasignar almacenamiento con longitud nueva) en la pgina 521 para obtener ejemplos). v Avanzando o retrocediendo el puntero por el almacenamiento utilizando aritmtica de punteros:
EVAL PTR = PTR + desplazamiento

(desplazamiento es la distancia en bytes que se mueve el puntero=

Ejemplos
La Figura 28 en la pgina 100 muestra cmo definir una estructura de datos de base.

Captulo 9. Tipos de datos y formatos de datos

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)

Figura 28. Definicin de estructuras y campos basados

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

VisualAge RPG Consulta del lenguaje

*.. 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

Figura 29. Aritmtica de punteros

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

Figura 30. Obtencin de una fecha en Juliano

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'

Figura 31. Cmo no codificar punteros de base

Tipo de datos carcter


El tipo de datos carcter representa valores de tipo carcter y puede tener uno de los formatos siguientes: A N G C Carcter Indicador Grfico UCS-2

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

VisualAge RPG Consulta del lenguaje

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 byte Datos de un solo byte

1 car.

1 car.

1 car.

1 car.

1 byte

1 byte

1 byte

1 byte Datos grficos

1 carcter grfico

1 carcter grfico

Figura 32. Comparacin de datos de un slo byte y grficos

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

VisualAge RPG Consulta del lenguaje

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.

Formato carcter, grfico y UCS-2 de longitud variable


Los campos de tipo carcter de longitud variable tienen una longitud mxima declarada y una longitud actual que puede variar mientras se ejecuta el programa. La longitud se mide en bytes nicos en el formato carcter y en bytes dobles en los formatos grfico y UCS-2. El almacenamiento asignado para los campos de tipo carcter de longitud variable es 2 bytes ms grande que la longitud mxima declarada. Los 2 bytes situados ms a la izquierda constituyen un campo de tipo entero sin signo que contiene la longitud actual en caracteres, caracteres grficos o caracteres UCS-2. Los datos de tipo carcter reales empiezan a partir del tercer byte del campo de longitud variable.

Captulo 9. Tipos de datos y formatos de datos

105

La Figura 33 muestra cmo se almacenan los campos de tipo carcter de longitud variable:
longitud actual UNS(5)

carcter-datos CHAR(N)

N = longitud mxima declarada 2 + N = nmero total de bytes

Figura 33. Campos de tipo carcter con formato de longitud variable

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

Figura 34. Campos grficos con formato de longitud variable

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.

Normas para los formatos de carcter, grfico y UCS-2 de longitud variable


A la hora de definir campos de longitud variable se aplican las normas siguientes: v La longitud declarada del campo puede ser de 1 a 65535 caracteres de un solo byte y de 1 a 16383 caracteres UCS-2 o grficos de doble byte.

106

VisualAge RPG Consulta del lenguaje

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:

Captulo 9. Tipos de datos y formatos de datos

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)

Figura 35. Definicin de campos de tipo carcter y UCS-2 de longitud variable

A continuacin se muestra un ejemplo de definicin de campos de tipo grfico y UCS-2 de longitud variable:

108

VisualAge RPG Consulta del lenguaje

* .. 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

Figura 36. Definicin de campos de tipo grfico y UCS-2 de longitud variable

Utilizacin de campos de longitud variable


La parte correspondiente a la longitud de un campo de longitud variable representa la longitud actual del campo medida en caracteres. En los campos de caracteres, esta longitud tambin representa la longitud actual en bytes. En los campos de doble byte (grficos y UCS-2), esta longitud representa la longitud del campo en bytes dobles. Por ejemplo, un campo UCS-2 con una longitud actual de 3 tiene una longitud de 3 caracteres de doble byte y una longitud de 6 bytes. Las siguientes secciones describen el mejor modo de utilizar los campos de longitud variable y cmo cambia la longitud actual al utilizar distintos cdigos de operacin. Cmo se establece la longitud del campo: Cuando se inicializa un campo de longitud variable utilizando INZ, su longitud inicial se establece en la longitud del valor de inicializacin. Por ejemplo, si se establece un campo de tipo carcter de longitud 10 en el valor ABC, su longitud inicial se establece en 3. La operacin EVAL cambia la longitud de un destino de longitud variable. Por ejemplo, si se asigna el valor XY a un campo de tipo carcter de longitud 10, su longitud se establece en 2.
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D fld 10A VARYING * No importa la longitud que tuviera 'fld' antes de EVAL; * despus de EVAL, su longitud ser 2. CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq... C EVAL fld = 'XY'

La operacin CLEAR cambia a 0 la longitud de un campo de longitud variable.


Captulo 9. Tipos de datos y formatos de datos

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

VisualAge RPG Consulta del lenguaje

*.. 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.

Conversin entre datos de tipo carcter, grfico y UCS-2


Nota: Si se ignoran los CCSID grficos (se ha especificado CCSID(*GRAPH:*IGNORE) en la especificacin de control o no se ha especificado CCSID(*GRAPH)), se considera que los datos grficos no tienen CCSID y no se soporta la conversin entre datos grficos y datos UCS-2. Los datos de tipo carcter, grfico y UCS-2 pueden tener distintos CCSID (ID de Juego de Caracteres Codificado). La conversin entre estos tipos de datos depende del CCSID de los datos.

Cdigos CCSID de los datos


Slo se tiene en consideracin el CCSID de los datos de tipo carcter al realizar conversiones entre datos de tipo carcter y tipo UCS-2. Cuando se realizan conversiones entre datos de tipo carcter y datos de tipo UCS-2 o grfico, se asume que el CCSID de los datos de tipo carcter es el CCSID de la estacin de trabajo. El CCSID de los datos UCS-2 toma por omisin el valor de 13488. Este valor por omisin puede cambiarse utilizando la palabra clave CCSID(*UCS2) en la especificacin de control. El CCSID de los campos UCS-2 descritos por el programa

Captulo 9. Tipos de datos y formatos de datos

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

VisualAge RPG Consulta del lenguaje

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

*USA *EUR *JIS

mm/dd/aaaa dd.mm.aaaa

/ . -

10 10 10

01/15/1996 15.01.1996 1996-01-15

Estndar industrial aaaa-mm-dd japons era cristiana

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

Captulo 9. Tipos de datos y formatos de datos

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 para operaciones MOVE, MOVEL y TEST


Tambin se da soporte a varios formatos nicamente para los campos utilizados por las operaciones MOVE, MOVEL y TEST. Este soporte se proporciona por compatibilidad con valores definidos externamente cuyo formato de ao es de tres dgitos y con el formato de ao de 4 dgitos *LONGJUL. La Tabla 18 lista los formatos de fecha definidos externamente que son vlidos y que pueden utilizarse en el Factor 1 de una operacin MOVE, MOVEL y TEST.
Tabla 18. Separadores y formatos de fecha definidos externamente
Nombre de formato Descripcin Formato (separador por omisin) Separadores Longitud Ejemplo (25 vlidos de abril del 2001)

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.

Tipo de datos numrico


Los datos numricos constan de datos que contienen cero o ms posiciones decimales. El formato de los datos numricos es uno de los siguientes: v Formato binario en la pgina 115 v Formato flotante en la pgina 117

114

VisualAge RPG Consulta del lenguaje

v v v v

Formato Formato Formato Formato

entero en la pgina 118 decimal empaquetado en la pgina 119 sin signo en la pgina 120 decimal con zona en la pgina 121

El valor de inicializacin por omisin para los campos numricos es cero.

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.

Archivo descrito por programa


A cada lectura de campo de entrada en formato binario el compilador le asigna una longitud de campo (nmero de dgitos). Se asigna una longitud de 4 a un campo binario de 2 bytes; se asigna una longitud de 9 a un campo binario de 4 bytes, si no se ha definido el campo en ningn otro lugar del programa. Debido a estas limitaciones de longitud, el valor decimal ms alto que puede asignarse a un campo binario de 2 bytes es 9999 y el valor decimal ms alto que puede asignarse a un campo binario de 4 bytes es 999 999 999. En general, un campo binario de n dgitos puede tener un valor mximo de n 9. Se presuponen cero posiciones decimales. En los archivos descritos por programa, especifique campos de entrada binaria, de salida binaria, y de matriz o tabla binaria con las entradas siguientes: v Campo de entrada binaria: Especifique B en la posicin 36 de las especificaciones de entrada. v Campo de salida binaria: Especifique B en la posicin 52 de las especificaciones de salida. Esta posicin debe estar en blanco si se especifica edicin. La longitud de un campo que se ha de grabar en formato binario no puede sobrepasar los nueve dgitos. 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. Dado que el compilador convierte un campo de 2 bytes de formato binario en un campo decimal con 1 a 4 dgitos, el valor de entrada puede ser demasiado grande. Si lo es, se elimina el dgito situado ms a la izquierda del nmero. Por ejemplo, si un campo de entrada binario de cuatro dgitos tiene un valor binario hexadecimal 6000, el compilador lo convierte en 24 576 en base decimal. El 2 se elimina y el resultado es 4576. De forma similar, el valor de entrada puede ser muy grande para un campo de 4 bytes en formato binario. Si los campos binarios tienen cero (0) posiciones decimales, puede evitar este problema de conversin definiendo campos enteros en lugar de campos binarios. Nota: Los campos de entrada binarios no pueden definirse como campos de emparejamiento o de control.

Captulo 9. Tipos de datos y formatos de datos

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

Archivo descrito externamente


Para un archivo descrito externamente, el formato de datos se especifica en la posicin 35 de las especificaciones de descripcin de datos. El nmero de dgitos del campo es exactamente igual a la longitud de la descripcin DDS. Por ejemplo, si define un campo binario en la especificacin DDS como de 7 dgitos y 0 posiciones decimales, los datos se manejan del modo siguiente: 1. El campo se define como un campo binario de 4 bytes en la especificacin de entrada 2. Se genera un campo empaquetado (7,0) para el campo en el programa VisualAge RPG. Si quiere retener toda la informacin del campo binario, redefina el campo como un subcampo binario en una estructura de datos o como un campo binario autnomo. Tenga en cuenta que un campo binario descrito externamente puede tener un valor situado fuera del rango permitido por los campos binarios VARPG. Si el campo binario descrito externamente tiene (0) posiciones decimales puede evitar este problema. Para ello, defina el campo binario descrito externamente en una especificacin de definicin y especifique la palabra clave EXTBININT en la especificacin de control. Esto cambiar el formato externo del campo descrito externamente por el de un entero con signo. La Figura 37 muestra cmo aparece el nmero decimal 8191 en diversos formatos.
Formato decimal empaquetado Signo positivo 0 0000 8 1000 1 0001 9 1001 1 0001 1100

3 bytes

Formato decimal con zona: Zona Zona

Zona 8 1 0011 0001

Zona 9 0011 1001

Signo positivo 1 0011 0001

0011

0000

0011

1000

5 bytes

Formato binario: Signo positivo

4096 + 2048 + 1024 + 512 + 256 + 128 + 64 + 32 + 16 +

+ 4 + 2 + 1 = 8191 1 1 1

1 2 bytes

Figura 37. Definicin de campos binarios


1

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

VisualAge RPG Consulta del lenguaje

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.

Representacin de pantalla externa de un campo de coma flotante


Consulte el apartado Especificacin de un formato externo para un campo numrico en la pgina 96 para obtener una descripcin general de una representacin de pantalla externa. La representacin de pantalla externa de valores flotantes se aplica a lo siguiente: v Salida de datos flotantes con la entrada Formato de datos en blanco v Entrada de datos flotantes con la entrada Formato de datos en blanco v Formato externo de matrices y tablas de tiempo de compilacin y de tiempo de preejecucin (cuando se omite la palabra clave EXTFMT).
Captulo 9. Tipos de datos y formatos de datos

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

VisualAge RPG Consulta del lenguaje

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.

Formato decimal empaquetado


El formato decimal empaquetado significa que cada byte de almacenamiento (excepto el byte de orden inferior) puede contener dos nmeros decimales. El byte de orden inferior contiene un dgito en la parte situada ms a la izquierda y el signo (positivo o negativo) en la parte situada ms a la derecha. Todos los nmeros decimales empaquetados utilizan signos preferidos: hexadecimal C para nmeros positivos y hexadecimal D para nmeros negativos. Adems, estn soportados los signos siguientes: hexadecimal A, E, F para nmeros positivos y hexadecimal B para nmeros negativos. El formato decimal empaquetado es as:

7 0

Dgito Dgito Dgito Signo

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.

Captulo 9. Tipos de datos y formatos de datos

119

Para un archivo descrito externamente, el formato de datos es el indicado en las especificaciones de descripcin de datos.

Determinacin de la longitud de dgitos de un campo decimal empaquetado


Utilice la frmula siguiente para saber la longitud en dgitos de un campo decimal empaquetado:
Nmero de dgitos = 2n 1, ...donde n = nmero de posiciones del registro de entrada empaquetadas que se han utilizado.

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.

Formato sin signo


El formato entero sin signo es igual que el formato entero excepto que el rango de valores no incluye nmeros negativos. Debe utilizar el formato sin signo slo cuando espere datos enteros no negativos.

120

VisualAge RPG Consulta del lenguaje

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.

Formato decimal con zona


Formato decimal con zona significa que cada byte de almacenamiento puede contener un dgito o un carcter. En el formato decimal con zona, cada byte de almacenamiento est dividido en dos partes: una parte de zona de 4 bits y una parte de dgitos de 4 bits. El formato decimal con zona es as:
0 Zona Zone Dgito 70 Zona Dgito Byte 70 Zona Dgito 7 0 Zona Dgito 7

0111 = Valor negativo (hex 7) 0011 = Valor positivo (hex 3)

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:

Captulo 9. Tipos de datos y formatos de datos

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.

Consideraciones para utilizar formatos numricos


Recuerde lo siguiente cuando defina campos numricos: v Cuando codifique la posicin final en las posiciones 47 a 51 de las especificaciones de salida, asegrese de utilizar el formato externo al calcular el nmero de bytes que debe ocupar el campo de salida. Por ejemplo, un campo empaquetado con 5 dgitos se almacena en 3 bytes, pero cuando la salida tiene formato con zona necesita 5 bytes. Cuando la salida tiene formato entero slo necesita 2 bytes. v Si traslada un campo de caracteres a un campo numrico con zona, el signo del campo de caracteres se establece en positivo o negativo con zona. La parte con zona de los dems bytes se establecer obligatoriamente en 3. Sin embargo, si la parte de dgitos de uno de los bytes del campo de caracteres contiene un dgito no vlido, se producir un error de datos decimales. v Cuando los campos numricos se escriben sin editar, el signo no se imprime como carcter aparte; el ltimo dgito del nmero incluir el signo. Esto puede producir resultados sorprendentes; por ejemplo, cuando se escribe -625, el valor decimal con zona es XX'363275', que aparece como 62u. 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. En estas operaciones aritmticas puede producirse un error de desbordamiento en tiempo de ejecucin cuando dos enteros de 4 bytes produzcan un resultado de 8 bytes. Para evitar este problema, asegrese de que un operando sea de 8 bytes.

Lneas directrices para elegir el formato numrico para un campo


Debe especificar el formato entero o sin signo para los campos cuando: v El rendimiento de la aritmtica es importante

122

VisualAge RPG Consulta del lenguaje

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.

Representacin de formatos numricos


La figura siguiente muestra qu aspecto tiene el nmero decimal 21544 en diversos formatos.

Captulo 9. Tipos de datos y formatos de datos

123

Formato decimal empaquetado:


Signo positivo

2 0010

4 0010 1100

0001 0101 0010 3 bytes

Formato decimal con zona:


Zona 2 0011 0010 Zona 1 0011 0001 Zona 5 0011 0101 5 bytes Zona Signo positivo 4 0011 0100 4 0011 0100

Formato binario:
Signo positivo

16384 + 4096 + 1024 + 32 + 8 ------------21544

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

Formato de entero (con signo) :


Signo positivo
16384 + 4096 + 1024 + 32 + 8 ------------21544

0 1 0 1

0 1 0 0

0 0 1 0

1 0 0 0

2 bytes

Formato sin signo:


16384 + 4096 + 1024 + 32 + 8 ------------21544

0 1 0 1

0 1 0 0

0 0 1 0

1 0 0 0

2 bytes

Tenga en cuenta lo siguiente acerca de las representaciones de la figura precedente.

124

VisualAge RPG Consulta del lenguaje

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

Figura 38. Representacin como entero del nmero -21544

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.

Tipo de datos puntero de procedimiento


Los punteros de procedimiento se utilizan para apuntar procedimientos o funciones. Un puntero de procedimiento seala un punto de entrada que est enlazado en el programa. Los punteros de procedimiento se definen en la especificacin de definicin. La longitud del campo de puntero de procedimiento 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. El valor de inicializacin por omisin para punteros de procedimiento es *NULL.

Captulo 9. Tipos de datos y formatos de datos

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

* * * * * * * * * * * * * * * * *

ptr1 ptr2 Conmutador Pad ptr1 ptr2 Conmutador

4 bytes 4 bytes 1 byte 3 bytes 4 bytes 4 bytes 1 byte

Figura 39. Definicin de punteros

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

VisualAge RPG Consulta del lenguaje

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:

Captulo 9. Tipos de datos y formatos de datos

127

Tabla 21. Valores de hora


Nombre formato *HMS *ISO *USA Descripcin 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 *LOVAL 00:00:00 00.00.00 00:00 AM *HIVAL 24:00:00 24.00.00 12:00 AM Valor por omisin 00:00:00 00.00.00 00:00 AM

*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.

Datos de indicacin de la hora


Los campos de indicacin de la hora tienen un tamao y formato predeterminado. Pueden definirse en la especificacin de definicin. Los datos de indicacin de la hora deben tener el formato
aaaa-mm-dd-hh.mm.ss.mmmmmm (longitud 26).

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.

Soporte de valores nulos de base de datos


En un programa de VisualAge RPG puede seleccionar una de tres formas distintas de manejar campos con posibilidad de nulos de un archivo de base de datos descrito externamente. Esto depende de cmo especifique la opcin Permitir valores nulos o la palabra clave de especificacin de control ALWNULL: 1. Control de usuario, ALWNULL(*USRCTL) - leer, grabar, actualizar y suprimir registros con valores nulos y recuperar y situar en registros con claves nulas.

128

VisualAge RPG Consulta del lenguaje

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.

Captulo 9. Tipos de datos y formatos de datos

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.

Entrada de campos con posibilidad de nulos


Para un campo con posibilidad de nulos en el programa RPG, se aplicar lo siguiente en la entrada, para archivos DISK y SPECIAL: v Cuando se lee un campo con posibilidad de nulos desde un archivo descrito externamente, el indicador de nulos para el campo se activa si el campo es nulo en el registro. De lo contrario, el indicador de nulos es desactivado. v Si se especifican indicadores de campo y el campo con posibilidad de nulos es nulo, se desactivarn todos los indicadores de campo. v Si se define un campo como campo con posibilidad de nulos en un archivo y sin posibilidad de nulos en otro, el campo se considerar como campo con posibilidad de nulos en el programa RPG. Sin embargo, al leer el segundo archivo, el indicador de nulos asociado al campo siempre estar desactivado. v Una operacin de entrada desde un archivo descrito por programa utilizando una estructura de datos en el campo de resultado no afecta al indicador de nulos asociado a la estructura de datos ni a cualquiera de los subcampos. v La lectura de campos con posibilidad de nulos utilizando especificaciones de entrada para archivos descritos por programa siempre desactiva los indicadores de nulos asociados. v Si los campos con posibilidad de nulos no se seleccionan para la lectura debido a un indicador de relacin de campo-registro, el indicador de nulos asociado no se cambiar.

Salida de campos con posibilidad de nulos


Cuando se graba un campo con posibilidad de nulos (salida o actualizacin) en un archivo descrito externamente, se graba un valor nulo si el indicador de nulos del campo est activado en el momento en que se realiza la operacin. Cuando un campo con posibilidad de nulos se transfiere o actualiza a un archivo de base de datos descrito externamente, entonces, si el campo es nulo, la gestin de datos ignorar el valor situado en el almacenamiento intermedio. Nota: Los campos que tienen el indicador activado en el momento de la salida trasladan los datos al almacenamiento intermedio. Esto significa que los errores tales como error de datos decimales o puntero de base no establecido se producirn incluso aunque el indicador de nulos del campo est activado.

130

VisualAge RPG Consulta del lenguaje

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

Figura 40. Entrada y salida de campos con posibilidad de nulos

Operaciones por clave


Si tiene un campo de clave con posibilidad de nulos, puede buscar registros que contengan valores nulos especificando un indicador en el factor 2 de la operacin KFLD y activar el indicador antes de la operacin de entrada por clave. Si no quiere que se seleccione una clave nula, desactive el indicador.

Captulo 9. Tipos de datos y formatos de datos

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

VisualAge RPG Consulta del lenguaje

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)

Soporte de slo entrada para campos con posibilidad de nulos


Cuando un archivo de slo entrada descrito externamente contiene campos con posibilidad de nulos y se especifica la opcin Slo entrada o la palabra clave ALWNULL(*INPUTONLY), se aplican las condiciones siguientes: v Cuando se recupera un registro de un archivo de base de datos y hay varios campos en el registro que contienen valores nulos, los valores por omisin de la base de datos para los campos con posibilidad de nulos se situarn en los campos que contienen valores nulos. El valor por omisin ser el valor por omisin de la DDS definido por el usuario o el valor por omisin definido por el sistema. v No ser capaz de determinar si un campo determinado del registro tiene un valor nulo. v No se permiten los 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 de clculo de entrada por clave corresponde a un campo de clave con posibilidad de nulos en un archivo de slo entrada descrito externamente.

Captulo 9. Tipos de datos y formatos de datos

133

Opcin de campos sin nulos


Cuando un archivo descrito externamente contiene campos con posibilidad de nulos y se especifica la opcin No o la palabra clave ALWNULL(*NO), se aplican las condiciones siguientes: v Un registro que contenga valores nulos recuperados de un archivo originar un error de correlacin de datos y se emitir un mensaje de error. v Los datos del registro no son accesibles y no puede actualizarse ninguno de los campos del registro con los valores del registro de entrada que contienen valores nulos. v Con esta opcin no puede situar valores nulos en campos con posibilidad de nulos para actualizar o aadir un registro. Si quiere situar valores nulos en campos con posibilidad de nulos, utilice la opcin Control de usuario.

Conversin de campos de base de datos de longitud variable


El compilador VisualAge RPG puede definir internamente como campos de tipo carcter de longitud fija los campos de tipo carcter o grfico de longitud variable procedentes de una estructura de datos o un archivo descritos externamente. Aunque la conversin de los campos de tipo carcter o grfico de longitud variable a formato de longitud fija no es necesaria, se conserva la opcin del compilador CVTOPT en el lenguaje con el fin de dar soporte a los programas escritos antes de que se diera soporte a los campos de longitud variable. Para convertir los campos de longitud variable, especifique *VARCHAR (para campos de tipo carcter de longitud variable) o *VARGRAPHIC (para campos grficos de longitud variable) en la palabra clave de especificacin de control CVTOPT. Si no se especifica *VARCHAR ni *VARGRAPHIC, o bien si se especifica *NOVARCHAR o *NOVARGRAPHIC, los campos de longitud variable no se convierten a formato carcter de longitud fija y se pueden utilizar en el programa VisualAge RPG como de longitud variable. Cuando se especifica *VARCHAR o *VARGRAPHIC, rigen las condiciones siguientes: v Si se extrae un campo de longitud variable de un archivo descrito externamente o una estructura de datos descrita externamente, se declara como un campo de caracteres de longitud fija. v En los campos de caracteres de un solo byte, la longitud del campo declarado es la longitud del campo DDS ms 2 bytes. v En los campos de datos de tipo DBCS grfico, la longitud del campo declarado es dos veces la longitud del campo de DDS ms 2 bytes. v Los dos bytes extra del campo pueden contienen un nmero binario que representa la longitud actual del campo de longitud variable. La Figura 42 en la pgina 135 muestra la longitud de campo de los campos de longitud variable. v En los campos grficos de longitud variable definidos como campos de tipo carcter de longitud fija, la longitud es el doble del nmero de caracteres grficos.

134

VisualAge RPG Consulta del lenguaje

Campos de carcter de un slo byte: longitud datos de caracteres UNS(5) CHAR(N)

N = longitud declarada en DDS 2 + N = longitud de campo

Campos de tipo de datos grficos: longitud UNS(5) datos grficos CHAR(2(N))

N = longitud declarada en DDS = nmero de bytes dobles 2 + 2(N) = longitud de campo

Figura 42. Longitud de campo de los campos de longitud variable convertidos

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:

Captulo 9. Tipos de datos y formatos de datos

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

Figura 43. Conversin de un campo de longitud variable en un programa (Pieza 1 de 2)


D* D* FLDVAR es un campo de longitud variable definido en DDS con una D* longitud DDS de 100. Tenga en cuenta que la longitud de campo D* VARPG es 102. D* DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D* D DS D FLDVAR 1 102 D FLDLEN 5U 0 OVERLAY(FLDVAR:1) D FLDCHR 100 OVERLAY(FLDVAR:3) *.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ..* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. C* C* Se mueve un valor de caracteres al campo de longitud variable FLDCHR. C* Despus de la operacin CHECKR, FLDLEN tiene un valor de 5. C READ MASTER LR C MOVEL 'SALES' FLDCHR C ' ' CHECKR FLDCHR FLDLEN C NLR UPDAT REC

Figura 43. Conversin de un campo de longitud variable en un programa (Pieza 2 de 2)

136

VisualAge RPG Consulta del lenguaje

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

Figura 44. Conversin de un campo grfico de longitud variable

Captulo 9. Tipos de datos y formatos de datos

137

138

VisualAge RPG Consulta del lenguaje

Captulo 10. Literales y constantes con nombre


Los literales y las constantes con nombre son tipos de constantes. Se pueden especificar constantes en cualquiera de los lugares siguientes: v En el factor 1 v En el factor 2 v En un factor 2 ampliado en las especificaciones de clculo v Como parmetros para palabras clave en la especificacin de control v Como parmetros para funciones incorporadas v En los campos Nombre de campo, Constante o Palabra de edicin de las especificaciones de salida. v Como ndices de matriz v Con palabras clave en la especificacin de definicin.

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

VisualAge RPG Consulta del lenguaje

A continuacin se listan algunos ejemplos de literales flotantes no vlidos:


1.234E 1.2e-1234.9E+309 12E-2345 1.797693134862316e308 179.7693134862316E306 0.0000000001E-308 <--<--<--<--<--<--<--falta el exponente falta el exponente exponente demasiado grande exponente demasiado pequeo valor demasiado grande valor demasiado grande valor demasiado pequeo

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 indicacin de la hora


Los literales de indicacin de la hora tienen el formato Zaaaa-mm-ddhh.mm.ss.mmmmmm, donde: v Z indica que el literal es de tipo de indicacin de la hora v aaaammdd es una fecha vlida (aomesda) v hh.mm.ss.mmmmmm es una hora vlida (horas.minutos.segundos.microsegundos) v aaaammddhh.mm.ss.mmmmmm est encerrado entre apstrofos v Los microsegundos son opcionales y si no se especifican toman el valor por omisin de cero.

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.

Constantes con nombre


Una constante con nombre es un nombre simblico asignado a un literal. Las constantes con nombre se definen en las especificaciones de definicin. El valor de una constante con nombre sigue las normas especificadas para los literales.

Captulo 10. Literales y constantes con nombre

141

Constantes con nombre


Puede darle un nombre a una constante. Este nombre representa un valor especfico que no puede cambiarse cuando est ejecutndose el programa.

Reglas para constantes con nombre


v Las constantes con nombre se pueden especificar en el factor 1, en el factor 2 y en el factor 2 ampliado de las especificaciones de clculo, como parmetros para palabras clave de la especificacin de control, como parmetros para funciones incorporadas y en los campos Nombre de Campo, Constante o Palabra de Edicin en las especificaciones de salida. Tambin pueden utilizarse como ndices de matrices o con palabras clave en la especificacin de definicin. v Las constantes con nombre numricas no tienen una precisin predefinida. La precisin real se define mediante el contexto que se ha especificado. v La constante con nombre puede definirse en cualquier lugar de las especificaciones de definicin.

Ejemplo de definicin de una constante con nombre


*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D.....................................Keywords+++++++++++++++++++++++++++++ * * Definir un campo de fecha e inicializarlo con el valor 3 de septiembre * de 1988. * D DateField S D INZ(D'1988-09-03') * * Definir un campo binario 9,5 e inicializarlo en 0. * D BIN9_5 S 9B 5 INZ * * Definir una constante con nombre cuyo valor es el alfabeto en * minsculas * D Lower C CONST('abcdefghijklmnopD qrstuvwxyz') * * Definir una constante con nombre sin la utilizacin explcita de * la palabra clave CONST. * D Upper C 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

Figura 45. Definicin de constantes con nombre

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

VisualAge RPG Consulta del lenguaje

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

*ON 1 *OFF es 0. Ambos son vlidos slo para campos de caracteres.

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

Reglas para constantes figurativas


Las reglas siguientes se aplican al utilizar constantes figurativas: v Las constantes figurativas que estn permitidas para los campos de tipo carcter de longitud fija lo estn tambin para los de longitud variable (*BLANK/*BLANKS, *ZERO/*ZEROS, *HIVAL, *LOVAL, *ALLx.., *ALLGK1K2, *ALLXx1.., *ON/*OFF). v Las constantes figurativas que estn permitidas para los campos grficos de longitud fija lo estn tambin para los de longitud variable (*BLANK/*BLANKS, *HIVAL, *LOVAL, *ALLGK1K2). v Los valores de constante figurativa son los mismos para los campos de tipo carcter y los grficos, tanto de longitud fija como de longitud variable:
*HIVAL *LOVAL *BLANK *ZERO *OFF *ON = = = = = = X'FF' X'00' ' ' o '0' o '0' o '1' o X'20' o blanco de doble byte X'30' X'30' X'31'

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

VisualAge RPG Consulta del lenguaje

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.

Captulo 10. Literales y constantes con nombre

145

146

VisualAge RPG Consulta del lenguaje

Captulo 11. Estructuras de datos


Puede definir un rea en el almacenamiento y la distribucin de los campos (subcampos) del rea. Esta rea de almacenamiento se denomina una estructura de datos. Especifique DS en las posiciones 24 a 25 de una especificacin de definicin para definir una estructura de datos. Puede utilizar estructuras de datos para: v Definir la misma rea interna varias veces utilizando formatos de datos distintos. v Operar sobre un subcampo individual utilizando el nombre del subcampo v Operar sobre todos los subcampos como un grupo utilizando el nombre de la estructura de datos v Definir una estructura de datos y sus subcampos de la misma forma en que se define un registro v Definir mltiples apariciones de un conjunto de datos v Agrupar datos no contiguos en ubicaciones de almacenamiento interno contiguas. Existen tres estructuras de datos especiales, cada una de ellas con un propsito especfico: v Una estructura de datos de rea de datos (identificada por una U en la posicin 23 de la especificacin de definicin). Consulte Posicin 23 (Tipo de estructura de datos) en la pgina 233. v Una estructura de datos de informacin de archivo (identificada por la palabra clave INFDS en las especificaciones de descripcin de archivo). Consulte INFDS(nombreDS) en la pgina 222. v Una estructura de datos de estado de programa (identificada por una S en la posicin 23 de la especificacin de definicin). Consulte Posicin 23 (Tipo de estructura de datos) en la pgina 233. Las estructuras de datos pueden estar descritas por programa o externamente. Una estructura de datos descrita por programa se identifica por un espacio en blanco en la posicin 22 de la especificacin de definicin. Las definiciones de subcampo para una estructura de datos descrita por programa deben ir inmediatamente despus de la definicin de estructura de datos. Consulte Posicin 22 (Descripcin externa) en la pgina 232. Una estructura de datos descrita externamente, identificada por una E en la posicin 22 de la especificacin de definicin, tiene descripciones de subcampo contenidas en un archivo descrito externamente. Cuando se compila el programa, se utiliza el nombre externo para localizar y extraer la descripcin externa de los subcampos de la estructura de datos. Especifique el nombre de la descripcin externa en las posiciones 7 a 21 o como un parmetro para la palabra clave EXTNAME. Consulte los apartados Posiciones 7-21 (Nombre) en la pgina 231 y EXTNAME(nombre_archivo{:nombre_formato}) en la pgina 244. Nota: El compilador utiliza los formatos de datos especificados para los subcampos de la descripcin externa como los formatos internos de los subcampos. Esto difiere del modo en que se tratan los archivos descritos externamente.

Copyright IBM Corp. 1994, 2000

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.

Definicin de subcampos de estructura de datos


Puede definir un subcampo especificando espacios en blanco en la entrada Tipo de definicin (posiciones 24 a 25) de una especificacin de definicin. La(s) definicin(es) de subcampo debe(n) ir inmediatamente a continuacin de la estructura de datos. Las definiciones de subcampo finalizan cuando aparece una especificacin de definicin cuya entrada Tipo de definicin no est en blanco o cuando aparece un tipo de especificacin distinto. El nombre del subcampo se entra en las posiciones 7 a 21. Para mejorar la lectura del fuente, puede sangrar los nombres de subcampo para mostrar grficamente que se trata de subcampos. Tambin puede definir un subcampo como un tem existente utilizando la palabra clave LIKE. Cuando se define de esta forma, el subcampo recibe la longitud y el tipo de datos del tem en el que se basa. En Figura 86 en la pgina 249 hallar un ejemplo con la palabra clave LIKE. Puede recubrir el almacenamiento de un subcampo definido previamente con el de otro subcampo utilizando la palabra clave OVERLAY. La palabra clave se especifica en la definicin de subcampo posterior.

Especificacin de la longitud de subcampo


La longitud de un subcampo puede especificarse utilizando notacin absoluta (posicional) o de longitud. Absoluta Especifique un valor en las entradas correspondientes a la posicin Desde (posiciones 26 a 32) y la posicin A (posiciones 33 a 39) en la especificacin de definicin. Longitud Especifique un valor en la entrada correspondiente a posicin A/Longitud (posiciones 33 a 39). La entrada posicin Desde est en blanco. Cuando se utilizan la notacin de longitud, el subcampo se sita de forma que la posicin inicial es mayor que la posicin A mxima de todos los subcampos definidos anteriormente. Para obtener ejemplos de cada notacin, consulte el apartado Ejemplos de estructura de datos en la pgina 150.

Alineacin de los subcampos de la estructura de datos


La alineacin de subcampos puede ser necesaria. En algunos casos se lleva a cabo automticamente, en otros, debe hacerse manualmente.

148

VisualAge RPG Consulta del lenguaje

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

Figura 46. Lmites para la alineacin de datos

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.

Estructura de datos de rea de datos


Una estructura de datos de rea de datos se especifica por una U en la posicin 23 de la especificacin de definicin. Esto indica que la misma rea de datos que se lee y bloquea en la inicializacin del programa debe grabarse y desbloquearse al final del programa. Las estructuras de datos de rea de datos, como otras estructuras de datos, son del tipo de caracteres. Un rea de datos que se incluya en una estructura de datos de rea de datos tambin deber ser de tipo carcter. El rea de datos y la estructura de datos de rea de datos deben tener el mismo nombre a menos que cambie el nombre del rea de datos en el programa
Captulo 11. Estructuras de datos

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.

Estructura de datos de informacin de archivo


Puede especificar una estructura de datos de informacin de archivo para cada archivo del programa. Las estructuras de datos de informacin de archivo se definen con la palabra clave INFDS en las especificaciones de descripcin de archivo. Consulte INFDS(nombreDS) en la pgina 222. Esto lo proporciona la informacin de estado de la excepcin o error de archivo que ha tenido lugar. El nombre de la estructura de datos de informacin de archivo debe ser exclusivo para cada archivo. Una estructura de datos de informacin de archivo contiene subcampos que proporcionan informacin acerca de la excepcin o error de archivo que se ha producido. Si desea obtener ms informacin sobre las estructuras de datos de informacin de archivo y sus subcampos, consulte Estructura de datos de informacin de archivo en la pgina 37.

Estructura de datos de estado de programa


Una estructura de datos de estado de programa proporciona informacin sobre las excepciones y errores del programa. Se identifica por una S en la posicin 23 de la especificacin de definicin. Para obtener ms informacin acerca de las estructuras de datos de estado de programa y de sus subcampos, consulte Estructura de datos de estado de programa en la pgina 48.

Ejemplos de estructura de datos


Los ejemplos siguientes muestran la forma de definir y utilizar las estructuras de datos. v Utilizacin de una estructura de datos para subdividir un campo v Utilizacin de una estructura de datos para agrupar campos v Estructura de datos con notacin absoluta y de longitud v Redenominar e inicializar una estructura de datos descrita externamente v Utilizacin de PREFIX para redenominar todos los campos en una estructura de datos externa v Definicin de una estructura de datos de varias apariciones v Utilizacin de estructuras de datos de reas de datos

150

VisualAge RPG Consulta del lenguaje

*.. 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

Figura 47. Utilizacin de una estructura de datos para subdividir un campo

Captulo 11. Estructuras de datos

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*

Figura 48. Utilizacin de una estructura de datos para agrupar campos

152

VisualAge RPG Consulta del lenguaje

*.. 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)

Figura 49. Estructura de datos con notacin absoluta y de longitud


*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D.....................................Keywords+++++++++++++++++++++++++++++ * * Definir una estructura de datos descrita externamente con nombre * interno FRED y nombre externo EXTDS y redenominar el campo CUST por * CUSTNAME. Inicializar CUSTNAME con 'GEORGE' y PRICE con 1234.89. * Asignar al subcampo ITMARR (definido en la descripcin externa como * campo de caracteres de 100 bytes) la palabra clave DIM * D Fred E DS EXTNAME(EXTDS) D CUSTNAME E EXTFLD(CUST) INZ('GEORGE') D PRICE E INZ(1234.89) D ITMARR E DIM(10)

Figura 50. Redenominar e inicializar una estructura de datos descrita externamente

Captulo 11. Estructuras de datos

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

Figura 52. Definicin de una estructura de datos de varias apariciones

154

VisualAge RPG Consulta del lenguaje

*.. 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

Figura 53. Utilizacin de estructuras de datos de reas de datos

Captulo 11. Estructuras de datos

155

156

VisualAge RPG Consulta del lenguaje

Captulo 12. Utilizacin de matrices y tablas


Las matrices y tablas son una coleccin de campos de datos (elementos) de igual: v Longitud de campo v Tipo de datos Carcter Numrico Fecha Hora Indicacin de la hora Grfico Puntero de base Puntero de procedimiento UCS-2 v Formato v Nmero de posiciones decimales (si es numrico) Las matrices y tablas se diferencian en lo siguiente: v Puede hacer referencia a un elemento de una matriz especfica por su posicin v No puede hacer referencia a elementos especficos de la tabla por su posicin v Un nombre de matriz hace referencia a todos los elementos de la matriz v Un nombre de tabla hace siempre referencia al elemento encontrado en la ltima operacin LOOKUP (Buscar un elemento de tabla o matriz). . Nota: Slo puede definir matrices de tiempo de ejecucin en un subprocedimiento. Las tablas, las matrices de tiempo de preejecucin y las matrices de tiempo de compilacin no estn soportadas. En los apartados siguientes se describe la forma de utilizar las matrices: v Matrices v Inicializacin de matrices en la pgina 164 v Definicin de matrices relacionadas en la pgina 164 v Bsqueda de matrices en la pgina 166 v Utilizacin de matrices en la pgina 168 v Salida de matriz en la pgina 170 En el apartado Tablas en la pgina 171 se describe la misma informacin para las tablas. En el apartado Matrices se describe cmo codificar una matriz, cmo especificar los valores iniciales de los elementos de matriz, cmo cambiar los valores de una matriz y las consideraciones especiales para utilizar una matriz.

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.

Copyright IBM Corp. 1994, 2000

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.

Nombre e ndice de una matriz


Se hace referencia a toda una matriz utilizando slo el nombre de la matriz. Se hace referencia a los elementos individuales de una matriz utilizando el nombre de la matriz, seguido de un parntesis de apertura, un ndice y un parntesis de cierre. Por ejemplo:
AR(IND)

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.

Especificaciones esenciales de una matriz


Para definir una matriz en una especificacin de definicin: v Especifique el nombre de la matriz en las posiciones 7 a 21 v Especifique el nmero de entradas de la matriz utilizando la palabra clave DIM v Especifique la longitud, formato de datos y posiciones decimales como lo hara para campos escalares. Puede especificar entradas de posicin Desde y A explcitas (si est definiendo un subcampo) o una entrada de longitud explcita, definir los atributos de matriz utilizando la palabra clave LIKE o bien especificar los atributos en otro lugar del programa. v Si necesita especificar una secuencia de ordenacin, utilice las palabras clave ASCEND o DESCEND. La Figura 54 en la pgina 159 muestra un ejemplo de las especificaciones de matriz esenciales.

Codificacin de una matriz de tiempo de ejecucin


Si no especifica nada ms aparte de las especificaciones esenciales de la matriz, habr definido una matriz de tiempo de ejecucin. Tenga en cuenta que las palabras clave ALT, CTDATA, EXTFMT, FROMFILE, PERRCD y TOFILE no se pueden utilizar para una matriz de tiempo de ejecucin.

158

VisualAge RPG Consulta del lenguaje

*...1....+....2....+....3....+....4....+....5....+....6....+....7... DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ DARC S 3A DIM(12)

Figura 54. Especificaciones esenciales para definir una matriz de tiempo de ejecucin

Carga de una matriz de tiempo de ejecucin


Puede asignar valores iniciales para una matriz de tiempo de ejecucin utilizando la palabra clave INZ en la especificacin de definicin. Tambin puede asignar valores iniciales para una matriz de tiempo de ejecucin a travs de las especificaciones de entrada o de clculo. Este segundo mtodo tambin puede utilizarse para poner datos en otros tipos de matrices. Por ejemplo, puede utilizar las especificaciones de clculo en la operacin MOVE para poner 0 en cada elemento de una matriz (o en elementos seleccionados). Utilizando las especificaciones de entrada, puede rellenar una matriz con los datos de un archivo. En los apartados siguientes se proporcionan ms detalles sobre la recuperacin de estos datos desde los registros de un archivo. Nota: Los datos de fecha y hora de tiempo de ejecucin deben estar en el mismo formato y utilizar los mismos separadores que la matriz de fecha y hora que se est cargando.

Carga de una matriz de tiempo de ejecucin desde un registro fuente


Si la informacin de la matriz est contenida en un registro, la informacin puede ocupar posiciones consecutivas en el registro o puede estar distribuida por el registro. Si los elementos de matriz son consecutivos en el registro de entrada, puede cargarse la matriz con una sola especificacin de entrada. La Figura 55 muestra las especificaciones para cargar una matriz de seis elementos (12 caracteres cada uno) desde un solo registro.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ DINPARR S 12A DIM(6) IFilename++Sq..RiPos1+NCCPos2+NCCPos3+NCC................................ I........................Fmt+SPFrom+To+++DcField+++++++++....FrPlMnZr.... IARRFILE AA 01 I 1 72 INPARR

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.

Captulo 12. Utilizacin de matrices y tablas

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

Carga de una matriz de tiempo de ejecucin utilizando varios registros fuente


Si la informacin de la matriz se encuentra en ms de un registro, puede utilizar mtodos diferentes para cargar la matriz. El mtodo a utilizar depende del tamao de la matriz y de si los elementos son o no consecutivos en los registros de entrada. Los registros se procesan uno por uno. Por lo tanto, no se procesa toda la matriz hasta que se lean todos los registros que contienen la informacin de la matriz y se mueva la informacin a los campos de la matriz. Puede que resulte necesario suprimir las operaciones de clculo y salida hasta que se lea toda la matriz en el programa.

Ordenacin de matrices de tiempo de ejecucin


No se comprueba la secuencia de las matrices de tiempo de ejecucin. Si procesa una operacin SORTA (clasificacin de una matriz), la matriz se clasifica en la secuencia indicada en la especificacin de definicin (palabras clave ASCEND o DESCEND) que define la matriz. Si no se especifica la secuencia, la matriz se clasifica por orden ascendente. Cuando en la operacin LOOKUP se utilizan los indicadores de mayor (posiciones 71 y 72 de las especificaciones de clculo) o menor (posiciones 73 y 74 de las especificaciones de clculo), debe especificarse la secuencia de la matriz.

Codificacin de una matriz de tiempo de compilacin


Se especifica una matriz de tiempo de compilacin utilizando las especificaciones esenciales y la palabra clave CTDATA. Puede especificar el nmero de entradas de la matriz en un registro de entrada utilizando la palabra clave PERRCD en la especificacin de definicin. Si no especifica la palabra clave PERRCD, el nmero de entradas toma el valor por omisin 1. Consulte las especificaciones del apartado Figura 57 en la pgina 161 para obtener un ejemplo. Puede especificar el formato de datos externo utilizando la palabra clave EXTFMT(cdigo). Consulte el apartado EXTFMT(cdigo) en la pgina 243 para obtener ms informacin. Nota: La palabra clave EXTFMT no puede utilizarse si los datos de matriz residen en la estacin de trabajo. La palabra clave EXTFMT no est permitida para las matrices de tiempo de compilacin de flotantes. Puede utilizarse la palabra clave TOFILE para especificar un archivo en el que se ha grabar la matriz cuando finalice el programa con el indicador LR activado.

160

VisualAge RPG Consulta del lenguaje

Carga de una matriz de tiempo de compilacin


Para una matriz de tiempo de compilacin, entre los datos fuente de la matriz en los registros del miembro fuente del programa. Si utiliza la palabra clave **CTDATA, pueden entrarse los datos de la matriz en cualquier lugar a continuacin de los registros fuente. Si no utiliza esta palabra clave, los datos de la matriz deben seguir al registro fuente en el orden en el que se han definido las matrices y tablas de tiempo de compilacin en las especificaciones de salida. Estos datos se cargan en la matriz cuando se compila el programa. Hasta que el programa se vuelva a compilar con nuevos datos, la matriz tendr siempre inicialmente los mismos valores cada vez que llame al programa, a menos que la llamada anterior haya finalizado con LR desactivado. Las matrices de tiempo de compilacin pueden describirse por separado o en formato alternativo (con la palabra clave ALT). El formato alternativo significa que los elementos de una matriz se mezclan en el registro de entrada con los elementos de otra matriz.

Reglas para los registros fuente de matriz


Las reglas para los registros fuente de matriz son: v La primera entrada de matriz de cada registro debe comenzar por la posicin 1. v Todos los elementos deben tener la misma longitud y no debe haber espacios entre ellos. v No es necesario rellenar con entradas todo un registro. Si no lo est, pueden incluirse blancos o comentarios despus de las entradas. Consulte la Figura 57. v Si el nmero de elementos de matriz indicado en la especificacin de definicin es mayor que el nmero de entradas proporcionado, los elementos restantes se rellenan con los valores por omisin correspondientes al tipo de datos especificado.
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords++++++++++++++++++++ DARC S 3A DIM(12) PERRCD(5) CTDATA **CTDATA ARC 48K16343J64044HAqu pueden colocarse los comentarios 12648A47349K346Aqu pueden colocarse los comentarios 50B125 Aqu pueden colocarse los comentarios

48K

163

43J

640

44H

126

48A

473

49K

346

50B

125

Esta es la matriz de tiempo de compilacin, ARC.

Figura 57. Registro fuente de matriz con comentarios

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.

Codificacin de una matriz de tiempo de preejecucin


En las especificaciones de definicin, adems de las especificaciones de matriz esenciales, puede especificar el nombre del archivo con los datos de entrada de la matriz, utilizando la palabra clave FROMFILE. Puede utilizar la palabra clave TOFILE para especificar el nombre de un archivo en el que se grabar la matriz al finalizar el programa. Si el archivo es un archivo combinado (especificado mediante una C en la posicin 17 de las especificaciones de descripcin de archivo), el parmetro de las palabras clave FROMFILE y TOFILE debe ser el mismo. Puede utilizar la palabra clave PERRCD para especificar el nmero de elementos por registro de entrada. En la palabra clave EXTFMT, especifique: v B si los datos estn en formato binario v L para indicar que hay un signo a la izquierda de un elemento de datos v P si los datos de la matriz estn en formato decimal empaquetado v R para indicar que hay un signo a la derecha de un elemento de datos v S si los datos de la matriz estn en formato decimal con zona Especifique una T en la posicin 18 de las especificaciones de descripcin de archivo del archivo que contiene los datos de entrada de la matriz Para comparar la codificacin de dos matrices de tiempo de preejecucin, una matriz de compilacin y una matriz de tiempo de ejecucin, consulte la Figura 58 en la pgina 163. Puede utilizarse la palabra clave ALT para especificar matrices con formato alternativo. (Consulte la Figura 58 en la pgina 163.) Nota: No se puede especificar el formato entero o sin signo para matrices definidas con ms de diez dgitos.

162

VisualAge RPG Consulta del lenguaje

*....+....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

Figura 58. Especificaciones de definicin para diferentes tipos de matrices

Carga de una matriz de preejecucin


Para una matriz de preejecucin, entre los datos de entrada de matriz en un archivo secuencial descrito por programa. Cuando llame a un programa, pero antes de que se procesen las operaciones de entrada, clculo o salida, se carga la matriz con los valores iniciales del archivo. Al modificar este archivo, puede alterar los valores iniciales de la matriz en la llamada siguiente al programa, sin compilar el programa de nuevo. El archivo se lee en secuencia de llegada. Las reglas para los datos de matriz de tiempo de ejecucin son las mismas que para los datos de matriz de tiempo de compilacin, excepto que no hay restricciones sobre la longitud de cada registro. Consulte el apartado Reglas para los registros fuente de matriz en la pgina 161.

Comprobacin de secuencia para las matrices de caracteres


Cuando se lleva a cabo la comprobacin de secuencia para las matrices de caracteres, VisualAge RPG utiliza el orden de clasificacin ASCII por omisin.

Captulo 12. Utilizacin de matrices y tablas

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).

Matrices de tiempo de compilacin y de tiempo de preejecucin


La palabra clave INZ no puede especificarse para una matriz de tiempo de compilacin o de tiempo de preejecucin porque los valores iniciales se asignan a travs de otros medios (datos de tiempo de compilacin o datos de un archivo de entrada). Si una matriz de tiempo de compilacin o de tiempo de precompilacin aparece en una estructura de datos globalmente inicializada, no se incluye en la inicializacin global. Nota: Las matrices de tiempo de compilacin se inicializan por el orden en el que se declaran los datos despus del programa y las matrices de tiempo de preejecucin se inicializan por el orden de declaracin de los archivos de inicializacin, independientemente del orden por el que se declaran estas matrices en la estructura de datos. Las matrices de tiempo de preejecucin se inicializan despus de las matrices de tiempo de compilacin. Si una inicializacin de subcampo solapa una matriz de tiempo de compilacin o de preejecucin, la matriz se inicializa despus del subcampo, independientemente del orden por el que se declaran los campos en la estructura de datos.

Definicin de matrices relacionadas


Puede cambiar dos matrices de tiempo de compilacin o dos matrices de preejecucin en formato alternativo utilizando la palabra clave ALT en la definicin de la matriz alternativa. El nombre de la matriz primaria se especifica como parmetro de la palabra clave ALT. Los registros para almacenar los datos de dichas matrices tienen el primer elemento de la primera matriz seguido por el primer elemento de la segunda matriz, el segundo elemento de la primera matriz seguido por el segundo elemento de la segunda matriz, el tercer elemento de la primera matriz seguida por el tercer elemento de la segunda matriz y as sucesivamente. Los elementos correspondientes deben aparecer en el mismo registro. La palabra clave PERRCD de la definicin de matriz principal especifica el nmero de pares correspondientes por registro; cada par de elementos cuenta como una sola entrada. Puede especificar EXTFMT en la matriz principal y en la matriz alterna. La Figura 59 en la pgina 165 muestra dos matrices con formato alternativo.

164

VisualAge RPG Consulta del lenguaje

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.

Figura 59. Matrices en formato alternativo y no 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 Entrada de de ARRA ARRA 1..... 7.....

Entrada Entrada de de ARRA ARRA 13 . . . . 19 . . . .

Entrada Entrada Entrada de de de ARRA ARRA ARRA 25 . . . . 31 . . . . 37 . . . .

Entrada de ARRA 43 . . . .

Entrada Entrada de de ARRA ARRA 49 . . . . 55 . . . .

Figura 60. Registros de matrices para dos archivos de matriz distintos

Este registro contiene entradas ARRB en las posiciones 1 a 50.

Entrada Entrada de de ARRB ARRB 1..... 6.....

Entrada Entrada de de ARRB ARRB 11 . . . . 16 . . . .

Entrada Entrada de de ARRB ARRB 21 . . . . 26 . . . .

Entrada de ARRB 31 . . . .

Entrada de ARRB 36 . . . .

Entrada de ARRB 41 . . . .

Entrada de ARRB 46 . . . .

Figura 61. Registros de matrices para un archivo de matriz

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 1.....

Entrada de ARRB 1.....

Entrada de ARRA 7.....

Entrada de ARRB 6.....

Entrada de ARRA 13 . . . .

Entrada Entrada de de ARRB ARRA 11 . . . . 19 . . . .

Entrada de ARRB 16 . . . .

Entrada de ARRA 25 . . . .

Entrada de ARRB 21 . . . .

Figura 62. Registros de matriz para un archivo de matriz en formato alternativo

Captulo 12. Utilizacin de matrices y tablas

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

Figura 63. Registros de matrices para un archivo de matriz en formato alternativo

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.

Bsqueda en una matriz sin un ndice


Cuando se busca una matriz sin un ndice, utilice el estado (activado o desactivado) de los indicadores resultantes para determinar si un elemento determinado se encuentra en la matriz. La bsqueda de una matriz sin un ndice puede utilizarse en la comprobacin de validez de los datos de entrada para determinar si un campo est en una lista de elementos de matriz. Generalmente se utiliza una operacin LOOKUP igual. En el factor 1 de las especificaciones de clculo, especifique el argumento de bsqueda (los datos para los que desea encontrar una coincidencia en los nombres de matriz) y coloque el factor 2 del nombre de la matriz. En el factor 2 especifique el nombre de la matriz en la que se ha de buscar. Como mnimo debe especificarse un indicador resultante. No deben realizarse entradas en mayor y menor para la misma operacin LOOKUP. Los indicadores de resultado no deben especificarse en mayor o menor si la matriz no est en secuencia (palabras clave ASCEND o DESCEND). Tambin puede utilizarse el nivel de control y los indicadores de condicin (especificado en las posiciones 7 a 11). El campo de resultado no puede utilizarse. La bsqueda comienza al principio de la matriz y finaliza al final de la matriz o cuando se satisfacen las condiciones de la bsqueda. Siempre que se encuentra un elemento de matriz que satisface el tipo de la bsqueda que est realizndose (igual, mayor, menor), inferior) se activa el indicador resultante. La Figura 64 en la pgina 167 muestra un ejemplo de una operacin LOOKUP en una matriz sin un ndice.

166

VisualAge RPG Consulta del lenguaje

*...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

Figura 64. Operacin LOOKUP para una matriz sin un ndice

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).

Bsqueda en una matriz con un ndice


Para averiguar qu elemento satisface una bsqueda LOOKUP, comience la bsqueda en un elemento determinado de la matriz. Para efectuar este tipo de bsqueda, realice las entradas en las especificaciones de clculo como lo hara para una matriz sin un ndice. Sin embargo, en el factor 2, entre el nombre de la matriz que se ha de buscar, seguido por un campo numrico entre parntesis (con cero posiciones decimales) que contenga el nmero del elemento en el que ha de comenzar la bsqueda. Esta constante o campo numrico se denomina ndice porque seala a cierto elemento de la matriz. El ndice se actualiza con el nmero de elemento que cumple las condiciones de la bsqueda o se establece en 0 si ha fallado la bsqueda. Puede utilizar una constante numrica como ndice para comprobar la existencia de un elemento que cumpla las condiciones de la bsqueda a partir de un elemento distinto de 1. Todas las dems normas aplicables a una matriz sin un ndice se aplican a una matriz con ndice. En la Figura 65 en la pgina 168 se muestra una operacin LOOKUP en una matriz con un ndice. Este ejemplo muestra la misma matriz de nmeros de departamento, DPTNOS, que la Figura 64. Sin embargo, tambin se define una matriz alternativa de descripciones de departamento, DPTDSC. Cada elemento de DPTDSC tiene una longitud de 20 posiciones. Si existen datos insuficientes en el archivo para inicializar toda la matriz, los elementos restantes de DPTNOS se rellenan con ceros y los elementos restantes de DPTDSC se rellenan con blancos.

Captulo 12. Utilizacin de matrices y tablas

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

Figura 65. Operacin LOOKUP sobre una matriz con un ndice

Utilizacin de matrices
Las matrices pueden utilizarse en especificaciones de entrada, salida o clculo.

Especificacin de una matriz en los clculos


En las especificaciones de clculo se puede especificar toda una matriz o elementos individuales de una matriz. Los elementos individuales se procesan como campos. Una matriz no contigua definida con la palabra clave OVERLAY no puede utilizarse con la operacin MOVEA o en el campo de resultado de una operacin PARM. Para especificar toda una matriz, utilice nicamente el nombre de matriz, que puede utilizarse como el factor 1, el factor 2 el campo de resultado. Pueden utilizarse las operaciones siguientes con un nombre de matriz:
ADD DEFINE MOVE RESET SUBDUR ADDDUR DIV MOVEL SCAN XFOOT CHECK EVAL MOVEA SORTA Z-ADD CHECKR EXTRCT MULT SQRT Z-SUB CLEAR LOOKUP PARM SUB

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

VisualAge RPG Consulta del lenguaje

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.

Clasificacin utilizando parte de la matriz como una clave


Puede utilizar la palabra clave OVERLAY para solapar una matriz con otra. Por ejemplo, puede tener una matriz base que contenga nombres y sueldos y dos matrices de solapamiento (una para los nombres y otra para los sueldos). A continuacin puede clasificar la matriz base por nombre o sueldo efectuando una clasificacin en la matriz de solapamiento correspondiente.

Captulo 12. Utilizacin de matrices y tablas

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

Figura 66. Operacin SORTA con OVERLAY

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.

Edicin de toda una matriz


Cuando se especifica la edicin para toda una matriz, se editan todos los elementos de la matriz. Si se requiere una edicin diferente para diversos elementos, haga referencia a estos individualmente. Cuando se especifica un cdigo de edicin para toda una matriz (posicin 44), se insertan automticamente dos espacios en blanco entre los elementos de la matriz:

170

VisualAge RPG Consulta del lenguaje

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.

LOOKUP con una tabla


Cuando se busca en una sola tabla, deben especificarse el factor 1, el factor 2 y como mnimo un indicador resultante. Tambin pueden utilizarse los indicadores de condicin (especificados en las posiciones 7 a 11). Cuando se encuentra un elemento de tabla que satisface el tipo de bsqueda que est realizndose (igual, mayor, menor), el elemento de tabla se convierte en el elemento actual para la tabla. Si la bsqueda no es satisfactoria, el elemento actual anterior contina siendo el elemento actual. Antes de una operacin LOOKUP satisfactoria, el primer elemento es el elemento actual. Los indicadores resultantes reflejan el resultado de la bsqueda. Si el indicador est activado, lo que indica una bsqueda satisfactoria, el elemento que satisface la bsqueda es el elemento actual.

LOOKUP con dos tablas


Cuando se utilizan dos tablas en una bsqueda, en realidad slo se busca en una. Cuando se satisface la condicin de la bsqueda (mayor, menor, igual), los elementos correspondientes quedan disponibles para su uso. El factor 1 debe contener el argumento de bsqueda y el factor 2 debe contener el nombre de la tabla en que se ha de buscar. El campo de resultado debe indicar cul es la tabla desde la que los datos tambin quedan disponibles para su uso. Debe utilizarse tambin un indicador resultante. Puede especificarse el nivel de control y los indicadores de condicin en las posiciones 7 a 11, si es necesario. Las dos tablas utilizadas deben tener el mismo nmero de entradas. Si la tabla en la que se realiza la bsqueda contiene ms elementos que la segunda tabla, es posible satisfacer la condicin de bsqueda. Sin embargo, puede que no haya un elemento en la segunda tabla que corresponda al elemento encontrado en la tabla de bsqueda. Pueden producirse resultados no deseados.

Captulo 12. Utilizacin de matrices y 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

Figura 67. Bsqueda de una entrada igual

Especificacin del elemento de tabla encontrado en una operacin LOOKUP


Cuando se utiliza un nombre de tabla en una operacin distinta de LOOKUP, el nombre de tabla hace referencia a los datos recuperados por la ltima bsqueda satisfactoria. Por lo tanto, cuando se especifica el nombre de tabla de este modo, pueden utilizarse los elementos de una tabla en las operaciones de clculo. Si se utiliza la tabla como el factor 1 en una operacin LOOKUP, se utiliza el elemento actual como el argumento de bsqueda. De este modo un elemento de una tabla puede convertirse en un argumento de bsqueda. Tambin puede utilizarse la tabla como el campo de resultado en operaciones distintas de LOOKUP. En este caso, el valor del elemento actual se cambia mediante la especificacin de clculo. De este modo, el contenido de la tabla puede modificarse mediante las operaciones de clculo. Consulte la Figura 68.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. C ARGMNT LOOKUP TABLEA 20 C* Si se encuentra el elemento se multiplica por 1,5. C* Si el contenido de toda la tabla antes de la operacin MULT C* es 1323,5, -7,8 y 113,4 y el valor de ARGMNT es -7,8, C* el segundo elemento es el elemento actual. C* Despus de la operacin MULT, toda la tabla tiene C* el valor siguiente: 1323,5, -11,7 y 113,4. C* Tenga en cuenta que slo ha cambiado el segundo elemento, ya que C* este era el elemento actual, establecido por la operacin LOOKUP. C IF *IN20 C TABLEA MULT 1.5 TABLEA C ENDIF

Figura 68. Especificacin del elemento de tabla encontrado en operaciones LOOKUP

172

VisualAge RPG Consulta del lenguaje

Captulo 13. Edicin de campos numricos


La edicin proporciona un medio de puntuar los campos numricos, incluyendo la impresin de smbolos de moneda, comas, puntos, signos menos y menos flotante. Tambin proporciona el movimiento de signo de campo desde el dgito ms a la derecha hasta el final del campo, blancos para campos de cero, espaciado en matrices, edicin de campos de fecha y proteccin de smbolo de moneda o asterisco. Puede editarse un campo mediante cdigos de edicin o palabras de edicin. Puede imprimir campos en formato de edicin utilizando especificaciones de salida o puede obtener el valor editado del campo en las especificaciones de clculo utilizando las funciones incorporadas %EDITC (cdigo de edicin) y %EDITW (palabra de edicin). Nota: Para obtener una descripcin de cmo editar partes de los campos de entrada y partes de texto esttico, consulte la publicacin Programacin con VisualAge para RPG, SC10-3067-02 (SC09-2449-02). Cuando se imprimen campos que no se editan, los campos aparecen exactamente como se representan internamente. Los ejemplos siguientes muestran cmo se puede editar campos de salida numricos.
Tipo de campo Alfanumrico Numrico (positivo) Numrico (negativo) Campo del sistema JOHN T SMITH 0047652 Impresin de campo no editado JOHN T SMITH 0047652 Impresin de campo editado JOHN T SMITH 47652

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.

Copyright IBM Corp. 1994, 2000

173

Cdigos de edicin simples


Puede utilizar los cdigos de edicin simples para editar campos numricos sin tener que especificar ninguna puntuacin. Estos cdigos y sus funciones son: v El cdigo de edicin X asegura un signo hexadecimal 3 para los campos positivos. Sin embargo, generalmente no tiene que especificar este cdigo, ya que lo hace el sistema. No se suprimen los cdigos iniciales. El cdigo de edicin X no modifica los nmeros negativos. v El cdigo de edicin Y se utiliza generalmente para editar un campo de fecha de 3 a 9 dgitos. Suprime los ceros situados ms a la izquierda de los campos de fecha hasta, pero no incluyendo, el dgito anterior al primer separador. Las barras inclinadas se insertan para separar el da, mes y ao. Pueden utilizarse las palabras clave DATEDIT(fmt{separador}) y DECEDIT(valor) en la especificacin de control para alterar los formatos de edicin. v El cdigo de edicin Y no es vlido para *YEAR, *MONTH, y *DAY. v El cdigo de edicin Z elimina el signo (ms o menos) y suprime los ceros iniciales de un campo numrico. La coma decimal no se coloca en el campo y no se imprime.

Cdigos de edicin de combinacin


Los cdigos de edicin de combinacin (1 a 4, A a D, J a Q) puntan un campo numrico. La palabra clave DECEDIT en la especificacin de control determina qu carcter se utiliza como separador decimal y si se suprimen los ceros iniciales. La posicin decimal del campo de origen determina si se imprime una coma decimal y dnde se imprime. Si se especifican posiciones decimales para el campo de origen y se suprime el saldo cero, el separador decimal slo se imprime si el campo no es cero. Si no se ha de imprimir un saldo cero, los campos de ceros se imprimen como blancos. Cuando se ha de imprimir un saldo cero y el campo es igual a cero, se imprime cualquiera de los siguientes: v Un separador decimal seguido por n ceros, donde n es el nmero de posiciones decimales del campo. v Un cero en la posicin de unidades de un campo si no se han especificado posiciones decimales. Puede utilizar un smbolo de moneda flotante o proteccin de asteriscos con cualquiera de las 12 combinaciones de cdigos de edicin. Para especificar un smbolo de moneda flotante, codifique el smbolo de moneda en las posiciones 53-55 de la especificacin de salida, junto con un cdigo de edicin en la posicin 44 del campo que se va a editar. El smbolo de moneda flotante aparece a la izquierda del primer dgito significativo. El smbolo de moneda flotante no se imprime en un saldo cero cuando se utiliza un cdigo de edicin que suprime el saldo cero. El smbolo de moneda no aparece en un saldo cero cuando se utiliza un cdigo de edicin que suprime el saldo cero. Se utiliza un signo de dlar ($) como smbolo de moneda a menos que se especifique otro con la palabra clave CURSYM en la especificacin de control. Una constante de asterisco codificada en las posiciones 53 a 55 de las especificaciones de salida (*), junto con un cdigo de edicin para el campo que se va a editar hace que se imprima un asterisco para cada cero suprimido. Se imprime un campo completo de asteriscos en un campo de origen de saldo cero.

174

VisualAge RPG Consulta del lenguaje

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.

Captulo 13. Edicin de 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.

Resumen de cdigos de edicin


En la Tabla 23 se resumen los cdigos de edicin y las opciones que proporcionan. Se imprime una versin simplificada de esta tabla sobre las posiciones 45 a 70 en las especificaciones de salida. En la Tabla 24 en la pgina 177 se muestran los campos despus de haberse editado. En la Tabla 25 en la pgina 178 se muestra el efecto que los diferentes cdigos de edicin tienen en el mismo campo con una posicin final especificada para salida.
Tabla 23. Cdigos de edicin
Parmetro de palabra clave DECEDIT Cdigo de edicin 1 2 3 4 A B C D J K L M N O P Q X1 Y Z
2 3

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

VisualAge RPG Consulta del lenguaje

Tabla 23. Cdigos de edicin (continuacin)


Parmetro de palabra clave DECEDIT Cdigo de edicin
1

Comas

Coma decimal

Signo para saldo negativo .

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.

Tabla 24. Ejemplos de utilizacin de cdigo de edicin


Nmero positivoDos Cdigos posiciones de edicin decimales No editado 1 2 3 4 A B C D J K L M N O P Q X Y Z
1 2 3

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

Saldo ceroDos posiciones decimales 000000 .00

Saldo ceroSin posiciones decimales

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

000000 0/00/00 0/00/00

0/01/20 1234567 1234567 120

Captulo 13. Edicin de campos numricos

177

Tabla 24. Ejemplos de utilizacin de cdigo de edicin (continuacin)


Nmero positivoDos Cdigos posiciones de edicin decimales
1

Nmero positivoSin posiciones decimales

Nmero negativoTres posiciones decimales

Nmero negativoSin posiciones decimales

Saldo ceroDos posiciones decimales

Saldo ceroSin posiciones decimales

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

o blanco en o blanco en la posicin la posicin

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.

Tabla 25. Efectos de los cdigos de edicin en la posicin final


Nmero negativo, 2 posiciones decimales. Posicin final especificada como 10. Posiciones de impresin de salida Cdigo de edicin
1

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

VisualAge RPG Consulta del lenguaje

Tabla 25. Efectos de los cdigos de edicin en la posicin final (continuacin)


Nmero negativo, 2 posiciones decimales. Posicin final especificada como 10. Posiciones de impresin de salida Cdigo de edicin Q X Y Z 0 3 4 5 6 0 / 7 4 0 4 8 . 4 1 4 9 1 1 / 1 10 2 r1 2 2

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.

Cmo codificar una palabra de edicin


Para utilizar una palabra de edicin, codifique la especificacin de salida como se muestra a continuacin: Posicin 21-29 30-43 44 45 Entrada Puede contener indicadores de condicin. Contiene el nombre del campo numrico desde el que se toman los datos que se van a editar. Cdigo de edicin: Debe estar en blanco, si est utilizando una palabra de edicin para editar los datos fuente. Una B en esta posicin indica que los datos fuente se establecen en cero o blancos despus de su edicin y salida. De lo contrario, no se modifican los datos fuente.
Captulo 13. Edicin de campos numricos

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.

Partes de una palabra de edicin


Una palabra de edicin (codificada en las posiciones 53 a 80 de las especificaciones de salida) consta de tres partes: el cuerpo, el estado y la expansin. A continuacin, se muestran estas tres partes de una palabra de edicin:
P A L A B R A b b b , b b . 0 . D E b b E D I C I N & C R & & T O T

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

VisualAge RPG Consulta del lenguaje

Formacin del cuerpo de una palabra de edicin


Los caracteres siguientes tienen significados especiales cuando se utilizan en el cuerpo de una palabra de edicin. Smbolo &: Produce un blanco en el campo editado. Puede utilizarse el ejemplo siguiente para editar un nmero de telfono. Tenga en cuenta que el cero de la primera posicin es necesario para imprimir la constante AREA.
Palabra de edicin '0AREA& &NO.& ' Datos fuente 4165551212 Aparece en el registro de salida como: AREA 416 NO. 555-1212

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'

Datos fuente 000012345 000000006 000000006

Aparece en el registro de salida como: $****123*DOLLARS 45 CTS $********DOLLARS 06 CTS $ 6 CTS

Puede imprimirse una fecha utilizando cualquiera de las palabras de edicin:


Palabra de edicin ' / / ' '0 / / ' Datos fuente 010388 010389 Aparece en el registro de salida como: 1/03/88 01/03/89

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

VisualAge RPG Consulta del lenguaje

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

Captulo 13. Edicin de campos numricos

183

Palabra de edicin ' ' , 0 . ' , 0 . ' . '

Datos fuente 00000012 00000123 00000123

Aparece en el registro de salida como: 0.12 1.23 0,001.23

' 0 ,

Formacin del estado de una palabra de edicin


Los caracteres siguientes pueden tener significados especiales cuando se utilizan en el estado de una palabra de edicin: Smbolo &: Produce un blanco en el campo de salida editado. Un smbolo & no puede sustituirse en el campo de salida editado. CR o smbolo menos: Si el signo de la salida editada es ms (+), estas posiciones se dejan en blanco. Si el signo del campo de salida editado es menos (), estas posiciones no se modifican. El ejemplo siguiente aade una indicacin de valor negativo. El signo menos slo se imprimir cuando el valor del campo sea negativo. Un smbolo CR cumple la misma funcin que un signo menos.
Palabra de edicin ' ' . ' . ' Datos fuente 000000123 000000123 Aparece en el registro de salida como: 1.23 1.23

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

Formato de la expansin de una palabra de edicin


Los caracteres de la parte de expansin de una palabra de edicin siempre se graban. La expansin no puede contener blancos. Si es necesario un blanco en el campo de salida editado, especifique un smbolo & en el cuerpo de la palabra de edicin. Pueden aadirse constantes para imprimir en cada lnea:
Palabra de edicin ' , 0. &CR&NET' ' , 0. &CR&NET' Datos fuente 000123 000123 Aparece en el registro de salida como: 1.23 CR NET 1.23 NET

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

VisualAge RPG Consulta del lenguaje

Palabra de edicin ' 0. &SECRET' ' 0. &SECRET' ' 0. &CR&&SECRET'

Datos fuente 12345 12345 12345

Aparece en el registro de salida como: 123.45 SECRET 123.45 123.45 ET SECRET

Resumen de reglas de codificacin para palabras de edicin


Las reglas siguientes se aplican a las palabras de edicin: v La posicin 44 (cdigos de edicin) debe estar en blanco. v Las posiciones 30 a 43 (nombre de campo) deben contener el nombre de un campo numrico. v Una palabra de edicin debe estar encerrada entre apstrofos, a menos que sea una constante con nombre. Entre el apstrofo inicial o comience un nombre de constante con nombre en la posicin 53. La palabra de edicin debe comenzar en la posicin 54. v La palabra de edicin puede contener ms posiciones de dgitos (blancos ms el cero inicial o asterisco) que el campo que se va a editar, pero no debe contener menos. Si hay ms posiciones de dgitos en la palabra de edicin que dgitos en el campo que se va a editar, se aaden ceros iniciales al campo antes de editarlo. v Si se desean ceros iniciales de los datos fuente, la palabra de edicin debe contener una posicin ms que el campo que se va a editar y debe colocarse un cero en la posicin de orden superior de la palabra de edicin. v En el cuerpo de la palabra de edicin nicamente se cuentan como posiciones de dgitos los blancos y los caracteres de finalizacin de supresin de ceros (cero y asterisco). El smbolo de moneda flotante no se cuenta como una posicin de dgitos. v Cuando se utiliza el smbolo de moneda flotante, la suma del nmero de blancos y el carcter de finalizacin de supresin de ceros (posiciones de dgitos) contenido en la palabra de edicin debe ser igual a o mayor que el nmero de posiciones del campo que se ha de editar. v Los ceros o asteriscos que vayan a continuacin del cero o asterisco situado ms a la izquierda se consideran constantes; no son caracteres sustituibles. v Al editar un campo entero sin signo, estn permitidos DB y CR y siempre se imprimirn como blancos.

Edicin de archivos descritos externamente


Para editar la salida de archivos de disco remotos, deben especificarse cdigos de edicin en las especificaciones de descripcin de datos (DDS). Nota: No se pueden utilizar cdigos de edicin para archivos especiales.

Captulo 13. Edicin de campos numricos

185

186

VisualAge RPG Consulta del lenguaje

Captulo 14. Inicializacin de los datos


En este apartado se describe cmo se inicializan los datos. La inicializacin de los datos consta de tres partes: la subrutina de inicializacin (*INZSR), los cdigos de operacin CLEAR y RESET y la inicializacin de los datos (palabra clave INZ). Para obtener ms informacin sobre la inicializacin de componentes lgicos, consulte el apartado Inicializar componentes lgicos en la pgina 29.

Subrutina de inicializacin (*INZSR)


La subrutina de inicializacin le permite procesar las especificaciones de clculo. Se declara como cualquier otra subrutina, pero con *INZSR en el factor 1. En esta subrutina puede entrar cualquier operacin, salvo la operacin RESET. *INZSR tambin puede ser llamada explcitamente mediante el cdigo de operacin EXSR o CASxx.

Cdigos de operacin CLEAR y RESET


El cdigo de operacin CLEAR establece las variables de una ventana o estructura en sus valores por omisin. Si especifica una estructura (formato de registro, estructura de datos o matriz), todos los campos de dicha estructura se borran en el mismo orden en que han sido declarados. El cdigo de operacin RESET establece de una ventana o estructura en sus valores iniciales. Puede utilizar la inicializacin de la estructura de datos para asignar los valores iniciales a los subcampos y despus modificar los valores durante la ejecucin del programa, y utilice el cdigo de operacin RESET para establecer de nuevo los valores campo en sus valores iniciales.

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.

Copyright IBM Corp. 1994, 2000

187

188

VisualAge RPG Consulta del lenguaje

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.

Copyright IBM Corp. 1994, 2000

189

190

VisualAge RPG Consulta del lenguaje

Captulo 15. Acerca de las especificaciones VisualAge RPG


El lenguaje VisualAge RPG consiste en una mezcla de cdigo dependiente de la posicin y cdigo de formato libre. Un programa VisualAge RPG se codifica en varias especificaciones. Cada especificacin tiene un conjunto especfico de funciones. Existen tres grupos de registros fuente que se pueden codificar en un programa VisualAge RPG: la seccin fuente principal, la seccin de subprocedimiento y la seccin de datos de programa. La estructura de la seccin fuente principal depende del tipo de objeto resultante de la compilacin: componente, NOMAIN DLL o EXE. La seccin fuente principal contiene todas las definiciones globales de un mdulo. Para un destino de componente, esta seccin tambin incluye las subrutinas de usuario y de accin. El diseo de la seccin fuente principal para cada destino de compilacin se muestra en Ubicacin de definiciones y mbito en la pgina 228. La seccin de subprocedimientos contiene especificaciones que definen todos los procedimientos codificados en un mdulo. La seccin de datos de programa contiene registros fuente con datos que se proporcionan en tiempo de compilacin. La ilustracin siguiente muestra los tipos de registros fuente que se pueden entrar en cada grupo y el orden de stos. Nota: El programa fuente de VisualAge RPG se debe entrar en el sistema en el orden que se muestra. Los tipos de especificacin pueden estar ausentes, pero como mnimo uno debe estar presente.

Copyright IBM Corp. 1994, 2000

191

Matriz en tiempo de compilacin y datos de tabla

** 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

VisualAge RPG Consulta del lenguaje

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.

Captulo 15. Acerca de las especificaciones VisualAge RPG

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.

Sintaxis de las palabras clave


Las palabras clave pueden no tener parmetros, tener parmetros opcionales o tener parmetros obligatorios. La sintaxis de las palabras clave es la siguiente:
Palabra clave(parmetro1 : parmetro2)

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

VisualAge RPG Consulta del lenguaje

Tabla 26. Ejemplos de notacin de palabras clave


Notacin llaves {} Ejemplo de notacin utilizada PRTCTL (data_struct {:*COMPAT}) TIME(format {separator}) Descripcin El parmetro data_struct es obligatorio y el parmetro *COMPAT es opcional. El parmetro format{separator} es obligatorio, pero la parte {separator} del parmetro es opcional. Los parmetros Ext_format y Int_format son obligatorios. El parmetro recformat es obligatorio y puede especificarse ms de una vez. Especificar *NO o *YES o ningn parmetro. Uno de los parmetros *OMIT, *VARSIZE, *STRING o *RIGHTADJ es obligatorio y puede especificarse ms de uno. Ejemplo de fuente entrado PRTCTL (data_struct1) TIME(*HMS&)

llaves {}

dos puntos (:)

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

VisualAge RPG Consulta del lenguaje

*.. 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)

Figura 70. Ejemplo

Campo de palabras clave de especificacin de control


La regla para la continuacin de la especificacin de control es que la especificacin contina en la posicin 7 o en la posicin posterior de la especificacin de control siguiente.
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 HKeywords++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ H DATFMT( H *MDY& H )

Figura 71. Continuacin en una especificacin de control

Campo de palabras clave de especificacin de descripcin de archivo


Las reglas de continuacin en la especificacin de descripcin de archivo son las siguientes: v La especificacin contina en la posicin 44 o en la posicin posterior de la especificacin de descripcin de archivo siguiente v Las posiciones 7-43 de la lnea de continuacin deben estar en blanco
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 FFilename++IT.A.FRlen+......A.Device+.Keywords++++++++++++++++++++++++++++ F RECNO F ( F *INU1 F )

Figura 72. Campo de palabras clave de especificacin de descripcin de archivo

Captulo 15. Acerca de las especificaciones VisualAge RPG

197

Campo de palabras clave de especificacin de definicin


Las reglas para la continuacin de la especificacin de definicin son: v La especificacin contina en la posicin 44 en una posicin posterior de la especificacin de definicin siguiente dependiendo del carcter de continuacin especificado. v Las posiciones 7-43 de la lnea de continuacin deben estar en blanco.
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D Keywords-cont++++++++++++++++++++++++ * DMARY C CONST( D 'Cinco lobitos tiene la loba, blancosD* Aqu slo se permite una lnea de comentarios o completamente en blanco D y negros detrs de la escoba.' D ) D* Literal numrico, contina con la primera posicin no en blanco D* en/posterior a la posicin 44 D* DNUMERIC C 12345 D 67 D* Constante con nombre de grficos DGRAF C G'AABBCCDD+ D EEFFGG'

Figura 73. Ejemplo de campo de palabras clave de especificacin de definicin

Factor 2 ampliado de especificacin de clculo


Las reglas para la continuacin de la especificacin de clculo son: v La especificacin contina en la posicin 36 o en una posicin posterior de la siguiente especificacin de clculo v Las posiciones 7-35 de la lnea de continuacin deben estar en blanco.
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++++ C Extended-factor2-++++++++++++++++++++++++++++ * C EVAL MARY='Cinco lobitos tiene la loba, blancos + C* Aqu slo se permite una lnea de comentarios o completamente en blanco C y negros detrs de la escoba.' C* C* Continuacin de la expresin aritmtica, NO un carcter de C* continuacin C C EVAL A = (B*D)/ C + C 24 C* La primera utilizacin de '+' en este ejemplo es el operador de C* concatenacin. La segunda utilizacin es la continuacin del C* literal de carcter C EVAL ERRMSG = NAME + C ' no se ha encontrado + C en el archivo.'

Figura 74. Ejemplo de factor 2 ampliado de especificacin de clculo

Campo de constante/palabra de edicin de especificacin de salida


Las reglas para la continuacin de la especificacin de salida son:

198

VisualAge RPG Consulta del lenguaje

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 '

Figura 75. Ejemplo de campo de constante/palabra de edicin de especificacin de salida

Campo de nombre de especificacin de definicin y procedimiento


Las reglas para la continuacin del nombre en las especificaciones de la definicin y del procedimiento son: v Las reglas de continuacin se aplican a nombres con ms de 15 caracteres. Cualquier nombre (incluso alguno con 15 caracteres o menos) puede continuar en varias lneas si se codifican puntos suspensivos (...) al final del nombre parcial. v Una definicin de nombre consta de los componentes siguientes: 1. Cero o ms lneas de nombre continuadas. Las lneas de nombre continuadas se identifican al tener puntos suspensivos como ltimos caracteres no en blanco de la entrada. El nombre debe empezar dentro de las posiciones 7 - 21 y puede finalizar en cualquier lugar hasta la posicin 77 (finalizando los puntos suspensivos en la posicin 80). No puede haber espacios en blanco entre los caracteres del principio del nombre y los puntos suspensivos (...) . Si alguna de estas condiciones no es verdadera, la lnea se considera como una lnea de definicin principal. 2. Una lnea de definicin principal que contenga el nombre, los atributos de definicin y las palabras clave. Si se codifica una lnea de nombre continuada, la entrada de nombre de la lnea de definicin principal se puede dejar en blanco. 3. Cero o ms lneas de continuacin de palabra clave.

Captulo 15. Acerca de las especificaciones VisualAge RPG

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

Figura 76. Definicin de nombres largos en RPG

200

VisualAge RPG Consulta del lenguaje

Captulo 16. Especificaciones de control


La sentencia de especificacin de control, identificada mediante una H en la columna 6, proporciona informacin acerca de la generacin y la ejecucin de programas. Esta informacin se proporciona al compilador mediante una especificacin de control incluida en el fuente. Si no se incluye ninguna especificacin de control, se asignan los valores por omisin a las palabras clave de la especificacin de control. Vea los valores por omisin en la descripcin de las entradas individuales. Las palabras clave de especificacin de control se aplican a nivel modular, lo que significa que si existe ms de un procedimiento codificado en un mdulo, los valores especificados en la especificacin de control se aplican a todos los procedimientos.

Sentencia de especificacin de control


La especificacin de control consta nicamente de palabras clave. Las palabras clave pueden situarse en cualquier lugar entre las posiciones 7 a 80. Las posiciones 81-100 pueden utilizarse para comentarios.
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 HKeywords++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Comments++++++++++++

Figura 77. Diseo de especificacin de control

Lo siguiente es un ejemplo de una especificacin de control:


*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 HKeywords++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ H CURSYM('$') DATEDIT(*MDY) DATFMT(*MDY/) H DECEDIT('.') TIMFMT(*ISO)

Posicin 6 (Tipo de formulario)


En la posicin 6 debe aparecer una H para identificar esta lnea como la especificacin de control.

Posiciones 7-80 (Palabras clave)


Las palabras clave de especificacin de control se utilizan para determinar cmo maneja el programa los dispositivos y cmo se representan ciertos tipos de informacin.

Sintaxis de las palabras clave


Las palabras clave de especificacin de control pueden no tener parmetros, parmetros opcionales ni parmetros obligatorios. La sintaxis de las palabras clave es la siguiente:
Palabra clave(parmetro1 : parmetro2)

donde: v Los parmetros van entre parntesis ().


Copyright IBM Corp. 1994, 2000

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.

ALWNULL(*NO | *INPUTONLY | *USRCTL)


La palabra clave ALWNULL especifica cmo se utilizarn los registros que contienen campos con posibilidad de nulos procedentes de archivos de base de datos descritos externamente. Si se especifica ALWNULL(*NO), no se podrn procesar aquellos registros que tengan campos con posibilidad de nulos procedentes de archivos descritos externamente. Si intenta recuperar un registro que contenga valores nulos, ninguno de los datos del registro ser accesible y se producir un error de correlacin de datos. Si se especifica ALWNULL(*INPUTONLY), se podrn leer satisfactoriamente los registros que tengan campos con posibilidad de nulos que contengan valores nulos procedentes de archivos de base de datos de slo entrada descritos externamente. Cuando se recupere un registro que contenga valores nulos, no se producir ningn error de correlacin de datos y los valores por omisin de la base de datos se colocarn en los campos que contengan valores nulos. No obstante, no se puede hacer lo siguiente: v Utilizar campos de clave con posibilidad de nulos v Crear o actualizar registros que contengan campos con posibilidad de nulos v Determinar si un campo con posibilidad de nulos es realmente nulo mientras se ejecuta el programa v Establecer un campo con posibilidad de nulos de manera que sea nulo. Si se especifica ALWNULL(*USRCTL), se podrn leer, grabar y actualizar registros con valores nulos procedentes de archivos de base de datos descritos externamente. Los registros con claves nulas pueden recuperarse utilizando operaciones por clave. Se puede determinar si un campo con posibilidad de nulos es realmente nulo y se puede establecer un campo con posibilidad de nulos de manera que sea nulo para salida o actualizacin. Es responsabilidad suya el asegurarse de que los campos que contienen valores nulos se utilicen correctamente.

202

VisualAge RPG Consulta del lenguaje

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.

CCSID(*GRAPH : parmetro | *UCS2 : nmero)


Esta palabra clave establece los cdigos CCSID grfico (*GRAPH) y UCS-2 (*UCS-2) por omisin del mdulo. Estos valores por omisin se utilizan en los datos de tiempo de compilacin, campos de entrada y salida descritos por el programa y definiciones de datos que no codifiquen la palabra clave CCSID. CCSID(*GRAPH : *IGNORE | *SRC | nmero) Establece el CCSID grfico por omisin del mdulo. Los valores posibles son: *IGNORE Por omisin, esta opcin est seleccionada. No se permiten las conversiones entre campos grficos y UCS-2 en el mdulo. No puede utilizarse la funcin incorporada %GRAPH. *SRC Se utilizar el CCSID grfico asociado al CCSID del archivo fuente. nmero Un CCSID grfico. CCSID(*UCS2 : nmero) Establece el CCSID UCS-2 por omisin del mdulo. Si no se especifica esta palabra clave, el valor que toma por omisin el CCSID UCS-2 es 13488. nmero debe ser un CCSID UCS-2. Los cdigos CCSID vlidos son 13844 y 17584 (que incluye el Euro). Si se especifica CCSID(*GRAPH : *SRC) o CCSID(*GRAPH : nmero): v Los campos grficos y UCS-2 de las estructuras de datos descritas externamente utilizarn el CCSID del archivo externo. v Los campos grficos o UCS-2 descritos por el programa utilizarn el CCSID grfico o UCS-2 por omisin del mdulo, respectivamente. Esta especificacin puede alterarse temporalmente utilizando la palabra clave CCSID(nmero) en la definicin del campo. (Vase CCSID(nmero | *DFT) en la pgina 239.) v Se asume que los campos y claves de entrada y salida grficos o UCS-2 descritos por el programa tienen el CCSID por omisin del mdulo.
Captulo 16. Especificaciones de control

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

VisualAge RPG Consulta del lenguaje

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

Mes/Da/Ao Da/Mes/Ao Ao/Mes/Da Juliana

01/15/91 15/01/91 91/01/15 91/015 1991-01-15 01/15/1991 15.01.1991 1991-01-15

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

VisualAge RPG Consulta del lenguaje

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.

Captulo 16. Especificaciones de control

207

Si no se especifica la palabra clave INDENT, se utilizar el valor especificado en el mandato.

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.

LIBLIST(archivo1 archivo2 ... archivon)


La palabra clave LIBLIST especifica la lista de archivos de biblioteca que debe utilizarse a la hora de enlazar la aplicacin. Los nombres de archivo deben ir separados por un espacio en blanco y la lista debe ir entre apstrofos. Si alguno de los nombres de archivo contiene espacios en blanco, debe ir entre comillas dobles.

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.

OPTION(*{NO}XREF *{NO}GEN *{NO}SECLVL *{NO}SHOWCPY *{NO}EXPDDS *{NO}EXT *{NO}SHOWSKP)


La palabra clave OPTION especifica las opciones que deben utilizarse al compilar el miembro fuente. Se puede especificar parte o la totalidad de las opciones en el orden en que se desee. No obstante, si se especifica una opcin de compilacin, no se puede utilizar el parmetro *NOxxxx correspondiente a dicha opcin de compilacin y viceversa.

208

VisualAge RPG Consulta del lenguaje

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.

Captulo 16. Especificaciones de control

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.

SQLDTFMT(*EUR | *ISO | *USA | *JIS)


La palabra clave SQLDTFMT especifica el formato de fecha y hora que se utilizar en la aplicacin. Los valores posibles son: *EUR Formato estndar para Europa de IBM.

210

VisualAge RPG Consulta del lenguaje

*ISO

Formato de la International Standards Organization.

*USA Formato estndar para los EE.UU. de IBM. *JIS Formato estndar de la industria japonesa para la era cristiana.

SQLISOLATIONLVL(*RR | *CS | *UR)


La palabra clave SQLISOLATIONLVL, especifica cmo leer la aplicacin los registros de base de datos SQL. Los valores posibles son: *RR La lectura repetible mantiene un bloqueo en todas las filas a las que la aplicacin accede desde el ltimo punto de compromiso. Si la aplicacin lee otra vez la misma fila, los valores no habrn cambiado. El efecto del nivel de aislamiento *RR es que una aplicacin puede impedir que otras aplicaciones o los usuarios modifiquen las tablas. Como resultado, la concurrencia global puede verse reducida. Por lo general, debe elegir la lectura repetible slo si la aplicacin precisa el bloqueo de filas; de lo contrario, es preferible utilizar *CS. *CS Estabilidad de cursor; *CS mantiene un bloqueo de fila solamente mientras el cursor est situado en esa fila. Cuando el cursor se desplace a otra fila, el bloqueo desaparecer. Sin embargo, si los datos se modifican, el bloqueo debe mantenerse hasta que los datos estn comprometidos. La estabilidad de cursor se aplica slo a los datos que se leen. Todos los datos modificados permanecen bloqueados hasta que se procesa una operacin COMMIT o ROLLBACK. Especifique estabilidad de cursor si se va a acceder a una fila determinada una sola vez durante la transaccin. De este modo, el bloqueo tiene un impacto mnimo en los usuarios y las aplicaciones concurrentes. *UR Lectura no comprometida; *UR sirve para ver las filas sin esperar bloqueos. La lectura no comprometida se aplica a las operaciones FETCH y SELECT INTO. En el caso de otras operaciones, con *UR se consigue lo mismo que con *CS, estabilidad de cursor. Una aplicacin que utilice este nivel lee y devuelve todas las filas, incluso si contienen cambios no comprometidos efectuados por otras aplicaciones. Puesto que este nivel de aislamiento no espera a los bloqueos de concurrencia, el rendimiento global puede aumentar.

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.

Captulo 16. Especificaciones de control

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

Nombre RPG *HMS *ISO *USA

Descripcin Horas:Minutos:Segundos International Standards Organization

Separadores vlidos Longitud :.,& . : 8 8 8

Ejemplo 14:00:00 14.00.00 02:00 PM

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

Estndar industrial japons hh:mm:ss era cristiana

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

VisualAge RPG Consulta del lenguaje

Captulo 17. Especificaciones de descripcin de archivo


Las especificaciones de descripcin de archivo identifican cada uno de los archivos que utiliza un programa. Cada archivo de un programa debe tener una sentencia de especificacin de descripcin de archivo correspondiente. Un archivo puede estar descrito por programa o descrito externamente. En los archivos descritos por programa, se incluyen las descripciones de registro y de campo en el programa utilizando las especificaciones de entrada y salida. Las descripciones de registro y de campo de los archivos descritos externamente se definen en un servidor AS/400 utilizando DDS o mandatos SQL/400. Para cada programa se aplican las limitaciones siguientes: v No existe un lmite del nmero mximo de archivos permitidos v Archivos DISK: Los archivos DISK pueden ser remotos o locales Los archivos remotos deben estar descritos externamente Los archivos locales deben estar descritos por programa v Archivos PRINTER: Se permite un mximo de ocho archivos PRINTER Los archivos PRINTER deben estar descritos por programa v Archivos SPECIAL: Los archivos SPECIAL deben estar descritos por programa.

Sentencia de especificacin de descripcin de archivo


La disposicin general de la especificacin de archivo es la siguiente: v El tipo de especificacin de descripcin de archivo (F) se entra en la posicin 6 v La parte no de comentario de la especificacin abarca de la posicin 7 a la 80: Las entradas de formato fijo abarcan de la posicin 7 a la 42 Las entradas de palabra clave abarcan de la posicin 44 a la 80 v La seccin de comentarios de la especificacin abarca de la posicin 81 a la 100.
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 FFilename++IT.A.FRlen+......A.Device+.Keywords+++++++++++++++++++++++++++++Comments++++++++++++

Figura 78. Diseo de especificacin de descripcin de archivo

Lnea de continuacin de palabras clave de descripcin de archivo


Si se requiere espacio adicional para palabras clave, el campo de palabras clave se puede continuar en las lneas subsiguientes de este modo: v la posicin 6 de la lnea de continuacin debe contener una F v las posiciones 7 a 43 de la lnea de continuacin debe estar en blanco v la especificacin contina en la posicin 44 o despus

Copyright IBM Corp. 1994, 2000

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

Posicin 6 (Tipo de formulario)


En esta posicin debe entrarse una F.

Posiciones 7-16 (Nombre de archivo)


Entrada Explicacin Un nombre de archivo vlido Todos los archivos utilizados en un programa deben tener un nombre exclusivo. El nombre de archivo puede tener una longitud de 1 a 10 caracteres y deben comenzar en la posicin 7. Para un archivo descrito externamente, el archivo debe existir tanto en el tiempo de compilacin como en el de ejecucin. Para un archivo descrito por programa, el archivo nicamente debe existir en el tiempo de ejecucin. Cuando se abren los archivos en tiempo de ejecucin, se abren en orden inverso al indicado en las especificaciones de descripcin de archivo. El nombre de dispositivo define las operaciones que pueden procesarse en el archivo asociado.

Archivo descrito por programa


En los archivos descritos por programa, el nombre de archivo entrado en las posiciones 7 a 16 debe entrarse tambin en: v Las especificaciones de entrada v Las especificaciones de salida o en una lnea de operacin de clculo de salida si el archivo es un archivo de salida, de actualizacin o combinado, o si para el archivo se especifica la adicin en archivo. v Las especificaciones de definicin si el archivo es un archivo de tabla o matriz. v Las especificaciones de clculo si se requiere el nombre de archivo para el cdigo de operacin especificado.

Archivo descrito externamente


En los archivos descritos externamente, el nombre de archivo entrado en las posiciones 7 a 16 es el nombre utilizado para localizar las descripciones de registro del archivo. Se aplican las reglas siguientes a los archivos descritos externamente: v Las especificaciones de entrada y salida para los archivos descritos externamente son optativas. Slo son necesarias si est aadiendo funciones VisualAge RPG, como por ejemplo indicadores de identificacin de registros, a la descripcin externa recuperada. v Cuando se recupera una descripcin externa, puede hacerse referencia a una definicin de registro mediante su nombre de formato de registro en las especificaciones de entrada, salida o clculo. v Un nombre de formato de registro debe ser un nombre simblico exclusivo. v No se permite un archivo lgico descrito externamente con dos formatos de registro con el mismo nombre.

Posicin 17 (Tipo de archivo)


Entrada Explicacin

214

VisualAge RPG Consulta del lenguaje

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).

Posicin 18 (Designacin de archivo)


Entrada Explicacin Blanco Archivo de salida T F Archivo de matriz o tabla Archivo controlado en clculo

Archivos de matrices o tablas


Los archivos de matriz o tabla especificados mediante una T en la posicin 18 se cargan en el tiempo de inicializacin del programa. El archivo de matriz o tabla puede ser de entrada o combinado. Deje esta entrada en blanco para los archivos de salida de matriz o tabla. No puede especificar SPECIAL como el dispositivo para los archivos de entrada de matriz y tabla. No puede especificar un archivo descrito externamente como un archivo de matriz o tabla. Si especifica T en la posicin 18, puede especificar un tipo de archivo combinado (C en la posicin 17) para un archivo DISK. Un tipo de archivo combinado permite que un archivo de matrices o de tablas lea o grabe en el mismo archivo (un archivo de sustitucin de matrices o tablas) o en otro diferente. Adems, tambin se debe especificar el nombre de archivo en las posiciones de la 7 a la 16 como parmetro para la palabra clave TOFILE en la especificacin de la definicin.

Captulo 17. Especificaciones de descripcin de archivo

215

Archivo controlado en clculo


En un archivo controlado en clculo, la entrada se controla mediante las operaciones de clculo. Los cdigos de operacin de archivo, como por ejemplo CHAIN o READ, se utilizan para realizar funciones de entrada.

Posicin 19 (Reservada)
Entrada Explicacin Blanco Esta entrada debe estar en blanco.

Posicin 20 (Adicin de archivo)


La posicin 20 indica si se ha de aadir registros a un archivo de entrada o de actualizacin. Esta entrada se pasa por alto para los archivos de actualizacin. Entrada Explicacin Blanco No pueden aadirse registros en un archivo de entrada o de actualizacin (I o U en la posicin 17). A Se aaden registros en un archivo de entrada o de actualizacin cuando las posiciones 18 a 20 de las especificaciones de registro de salida del archivo contienen ADD o cuando se utiliza el cdigo de operacin WRITE en las especificaciones de clculo.

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

Salida Posiciones 18-20 Blanco ADD

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

VisualAge RPG Consulta del lenguaje

Posicin 21 (Reservada)
Entrada Explicacin Blanco Esta entrada debe estar en blanco.

Posicin 22 (Formato de archivo)


Entrada Explicacin F E Archivo descrito por programa Archivo descrito externamente

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.

Posiciones 23-27 (Longitud de registro)


Utilice las posiciones 23 a 27 para indicar la longitud de los registros lgicos contenidos en un archivo descrito por programa. El tamao mximo de registro que puede especificarse es 32766; sin embargo, los lmites de tamao de registro de cualquier dispositivo puede alterar temporalmente este valor. En los archivos PRINTER, especifican una longitud de registro que no sobrepasa el nmero de columnas de la salida de impresora. Esta entrada debe estar en blanco para los archivos descritos externamente.

Posicin 28 (Reservada)
Entrada Explicacin Blanco Esta entrada debe estar en blanco.

Posiciones 29-33 (Reservadas)


Entrada Explicacin Blanco Esta entrada debe estar en blanco.

Posicin 34 (Tipo de direccin de registro)


Entrada Explicacin

Captulo 17. Especificaciones de descripcin de archivo

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.

Blanco = Proceso no por clave


Un blanco indica que el archivo se procesa sin la utilizacin de claves. Un archivo procesado sin claves puede procesarse de modo consecutivo o aleatorio por el nmero de registro relativo. El proceso de entrada por el nmero de registro relativo se determina mediante un blanco en la posicin 34 y mediante la utilizacin del cdigo de operacin CHAIN, SETLL o SETGT. El proceso de salida por nmero de registro relativo se determina mediante un blanco en la posicin 34 y mediante la utilizacin de la palabra clave RECNO en las especificaciones de descripcin de archivo.

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.

Posiciones 36-42 (Dispositivo)


Entrada PRINTER DISK Explicacin Este es un archivo de impresora con caracteres de control que pueden enviarse a una impresora. Este es un archivo de disco. Para los archivos remotos est disponible el proceso secuencial y aleatorio de lectura/grabacin. Para los archivos locales est disponible el proceso secuencial y relativo de registros. Este es un archivo especial. La entrada o salida est en un dispositivo al que se accede mediante el cdigo suministrado por usuario que est enlazada a la aplicacin VisualAge RPG. El nombre del mdulo del cdigo suministrado por usuario debe especificarse como el parmetro de la palabra clave PROCNAME. Se crea una lista de parmetros para utilizar con este programa que incluye un parmetro de cdigo de opcin y un parmetro de cdigo de estado. El archivo debe estar en un formato no bloqueado fijo. Consulte PLIST(nombre_Plist) en la pgina 222 y PROCNAME(nombre_procedimiento) en la pgina 223 para obtener ms informacin.

SPECIAL

218

VisualAge RPG Consulta del lenguaje

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.

Posiciones 44-80 (Palabras clave)


Las posiciones 44 a 80 se proporcionan para las palabras clave de especificacin de descripcin de archivo. Las palabras clave se utilizan para proporcionar informacin sobre el archivo que est definindose. Las palabras clave de especificacin de descripcin de archivo pueden no tener parmetros, parmetros opcionales ni parmetros obligatorios. La sintaxis de las palabras clave es la siguiente:
Palabra clave(parmetro1 : parmetro2)

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

Captulo 17. Especificaciones de descripcin de archivo

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 por programa S S S

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

VisualAge RPG Consulta del lenguaje

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.

Captulo 17. Especificaciones de descripcin de archivo

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

VisualAge RPG Consulta del lenguaje

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.

Estructura de datos PRTCTL de longitud ampliada


Para esta estructura de datos se requiere un mnimo de 15 bytes. La disposicin de la estructura de datos PRTCTL es la siguiente:

Captulo 17. Especificaciones de descripcin de archivo

223

Posiciones de la estructura de datos 1-3 4-6 7-9 10-12 13-15

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.

Estructura de datos *COMPAT PRTCTL


Posiciones de la estructura de datos 1 2 3-4 5-6 7-9 Contenido de subcampo

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

VisualAge RPG Consulta del lenguaje

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.

Captulo 17. Especificaciones de descripcin de archivo

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.

Tipos de archivo y mtodos de proceso


La tabla siguiente muestra las entradas vlidas para las posiciones 28, 34 y 35 de las especificaciones de descripcin de archivo para los diferentes tipos de archivos y mtodos de acceso. Los mtodos de proceso de archivos de disco son: v Proceso de nmero relativo de registro v Proceso consecutivo v Proceso secuencial por clave v Proceso aleatorio por clave Nota: Los archivos DISK locales slo pueden procesarse secuencialmente o mediante un registro relativo.
Tabla 30. Mtodos de proceso para archivos DISK
Acceso Aleatorio Mtodo RRN Cdigo de Posicin operacin 28 CHAIN Blanco Posicin 34 Blanco Posicin 35 Blanco Explicacin Acceso por orden fsico de registros Acceso secuencial por clave Acceso secuencial Acceso secuencial por clave

Secuencial

Clave

READ READE READP READPE READ CHAIN

Blanco

Blanco

Secuencial Aleatorio

RRN Clave

Blanco Blanco

Blanco K

Blanco Blanco

226

VisualAge RPG Consulta del lenguaje

Captulo 18. Especificaciones de definicin


Las especificaciones de definicin se pueden utilizar para definir estructuras de datos, subcampos de estructuras de datos, prototipos, interfaces de procedimientos, parmetros con prototipo, campos autnomos, constantes con nombre y ventanas de mensajes. Dependiendo del lugar en el que se produce la definicin, existen diferencias tanto sobre lo que se puede definir como sobre el mbito de la definicin. Especifique el tipo de definicin en las posiciones 24 a 25, tal y como se indica a continuacin: Entrada Tipo de definicin Blanco Un subcampo de estructura de datos o definicin de parmetro C DS PI PR S Constante con nombre Estructura de datos Interfaz de procedimiento Prototipo Campo autnomo

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

Copyright IBM Corp. 1994, 2000

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.

Ubicacin de definiciones y mbito


Dependiendo de dnde tiene lugar la definicin, sta tendr un mbito diferente. El mbito hace referencia al rango de lneas de fuente en el que se conoce un nombre. Existen dos tipos de mbitos: global y local. La Figura 80 muestra la relacin entre la ubicacin de definiciones en un mdulo y el mbito. La Figura 81 en la pgina 229 muestra el diseo de la seccin de fuente principal para cada destino de compilacin posible: componente, NOMAIN DLL o EXE.
*MDULO Seccin fuente principal

Subprocedimiento 1 mbito local Subprocedimiento 2 mbito local

mbito global

Datos de programa - parte de la seccin fuente principal

Figura 80. mbito de definiciones

228

VisualAge RPG Consulta del lenguaje

COMPONENTE - - Omita las palabras clave NOMAIN y EXE de la especificacin de control

Subrutinas de accin Subrutinas de usuario

H F D I C C C O P P P

Seccin fuente principal Definiciones globales

Los procedimientos siguen las subrutinas de usuario y de accin

NOMAIN DLL - - Especifique la palabra NOMAIN en la especificacin de control H F D I O P P P

Seccin fuente principal con definiciones globales

EXE

- - Especifique la palabra clave EXE en la especificacin de control

H F D I O P P P P P

Seccin fuente principal con definiciones globales

Uno de stos es el procedimiento principal

Figura 81. Seccin de fuente principal para cada Destino de compilacin

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.

Sentencia de especificacin de definicin


La disposicin general de la especificacin de definicin es la siguiente: v El tipo de especificacin de definicin (D) se entra en la posicin 6 v La seccin no de comentario de la especificacin abarca de la posicin 7 a la posicin 80 Las entradas de formato fijo abarcan de la posicin 7 a la 42 Las entradas de palabra clave abarcan de la posicin 44 a la 80 v La seccin de comentarios de la especificacin abarca de la posicin 81 a la 100
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++Comments++++++++++++

Figura 82. Diseo de especificacin de definicin

Lnea de continuacin de palabras clave de especificacin de definicin


Si se requiere espacio adicional para palabras clave, el campo de palabras clave se puede continuar en las lneas subsiguientes de este modo: v La posicin 6 de la lnea de continuacin debe contener una D

230

VisualAge RPG Consulta del lenguaje

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

Lnea de nombre continuado de especificacin de definicin


En la entrada de Nombre de la especificacin de definicin se puede especificar un nombre de hasta 15 caracteres de longitud sin que requiera continuacin. Cualquier nombre (incluso alguno con 15 caracteres o menos) puede continuar en varias lneas si se codifican puntos suspensivos (...) al final del nombre parcial. Una definicin de nombre consta de los componentes siguientes: 1. Cero o ms lneas de nombre continuado. Las lneas de nombre continuado se identifican al tener puntos suspensivos como ltimo carcter no en blanco de la entrada. El nombre debe empezar dentro de las posiciones de la 7 a la 21 y puede finalizar en cualquier lugar hasta la posicin 77 (finalizando los puntos suspensivos en la posicin 80). No puede haber espacios en blanco entre los caracteres del principio del nombre y los puntos suspensivos. Si alguna de estas condiciones no es verdadera, la lnea se analiza como una lnea de definicin principal. 2. Una lnea de definicin principal que contenga el nombre, los atributos de definicin y las palabras clave. Si se codifica una lnea de nombre continuado, la entrada de nombre de la lnea de definicin principal se puede dejar en blanco. 3. Cero o ms lneas de continuacin de palabra clave.
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 DContinuedName+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Comments++++++++++++

Figura 84. Diseo de lnea de nombre continuado de especificacin de definicin

Posicin 6 (Tipo de formulario)


Debe entrarse A D en esta posicin para las especificaciones de definicin.

Posiciones 7-21 (Nombre)


Entrada Explicacin Nombre El nombre de la estructura de datos, subcampo de estructura de datos, campo autnomo, constante con nombre, programa local y parmetros para el programa local que se va a definir. Blanco Especifica campos de relleno en las definiciones de subcampo de estructura de datos o una estructura de datos sin nombre en las definiciones de estructura de datos.

Captulo 18. Especificaciones 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.

Posicin 22 (Descripcin externa)


Esta posicin identifica una estructura de datos o un subcampo de estructura de datos descrita externamente. Si en esta especificacin no se define una estructura de datos o un subcampo, este campo debe dejarse en blanco. Entrada Explicacin de estructuras de datos E Identifica una estructura de datos como descrita externamente: las definiciones de subcampo se definen externamente. Si no se especifica la palabra clave EXTNAME, las posiciones 7-21 deben contener el nombre del archivo descrito externamente que contiene la definicin de estructura de datos. Descrita por programa: le siguen a esta especificacin definiciones de subcampo para esta estructura de datos. Entrada Explicacin de subcampos E Identifica un subcampo de estructura de datos como descrito externamente- Es necesaria la especificacin de un subcampo descrito externamente slo cuando se requieren palabras clave, como por ejemplo EXTFLD y INZ. Descrito por programa: el subcampo de estructura de datos se define en esta lnea de especificacin.

Blanco

Blanco

232

VisualAge RPG Consulta del lenguaje

Posicin 23 (Tipo de estructura de datos)


Esta entrada se utiliza para identificar el tipo de estructura de datos que se est definiendo. Si no est definiendo una estructura de datos, esta entrada debe dejarse en blanco. Entrada Explicacin Blanco La estructura de datos que est definindose no es un estado de programa ni una estructura de datos; o en esta especificacin no se est definiendo una estructura de datos. S U Estructura de datos de estado del programa. Slo puede designarse una estructura de datos como la estructura de datos de estado del programa. Estructura de datos de rea de datos. El rea de datos se recupera en la inicializacin y se vuelve a grabar al final del programa: v Si se especifica la palabra clave DTAARA, se utiliza el parmetro de la palabra clave DTAARA como el nombre del rea de datos externa. v Si no se especifica la palabra clave DTAARA, se utiliza el nombre de las posiciones 7-21 como el nombre del rea de datos externa.

Posiciones 24-25 (Tipo de definicin)


Entrada Blanco Explicacin La especificacin define un subcampo de estructura de datos o un parmetro dentro de una definicin de interfaz de procedimiento o prototipo. La especificacin define una constante. La posicin 25 debe estar en blanco. La especificacin define una estructura de datos. La especificacin define una ventana de mensaje para utilizarla con el cdigo de operacin DSPLY. La posicin 25 debe estar en blanco. La especificacin define una interfaz de procedimiento y el valor de retorno, si hay alguno. La especificacin define un prototipo para una llamada a un archivo local EXE, CMD o BAT. La especificacin PR va seguida por cero o ms definiciones de parmetros (un blanco en las posiciones 24-25), indicando el nmero y tipo de parmetros que requiere el programa. Una definicin con prototipo finaliza con la primera especificacin de definicin que no tenga blancos en las posiciones 24-25 o con la primera especificacin que no sea una especificacin de definicin. La especificacin define un campo autnomo, una matriz o tabla. Los campos autnomos le permiten definir campos individuales de trabajo que no requieren la definicin de una estructura de datos. En los campos autnomos se permite lo siguiente: v Un campo autnomo tiene un tipo de datos internos especificable. v Un campo autnomo puede definirse como una matriz, tabla o campo. v Slo se permite la anotacin de longitud.

C (columna 24) DS M (columna 24)

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.

Posiciones 26-32 (Desde posicin)


Las posiciones 26-32 slo pueden contener una entrada si se est definiendo la ubicacin de un subcampo en una estructura de datos. Entrada Explicacin Blanco Una posicin DESDE en blanco indica que el valor del campo A/LONGITUD especifica la longitud del subcampo o que no se est definiendo un subcampo en esta lnea de especificacin. nnnnnnn Posicin inicial absoluta del subcampo en una estructura de datos. El valor especificado debe estar entre 1 y 65535para una estructura de datos con nombre ( y entre 1 y 9999999 para una estructura de datos sin nombre) y estar justificado a la derecha en dichas posiciones. Palabras reservadas Se permiten palabras reservadas para la estructura de datos de estado de programa o para la estructura de datos de informacin de archivo (justificado a la izquierda) en los campos DESDE-A/LONGITUD (posiciones 26-39). Estas palabras reservadas especiales definen la ubicacin de los subcampos en las estructuras de datos. Las palabras reservadas para la estructura de datos de estado del programa son *STATUS, *PROC, *PARM y *ROUTINE. Las palabras reservadas para la estructura de datos de informacin de archivo (INFDS) son *FILE, *RECORD, *OPCODE, *STATUS y *ROUTINE.

Posiciones 33-39 (Hasta posicin/Longitud)


Entrada Explicacin Blanco Si las posiciones 33-39 estn en blanco: v Se est definiendo una constante con nombre en esta lnea de especificacin, o v Se est definiendo el campo autnomo o subcampo utilizando LIKE (COMO) otro campo, o v El campo autnomo o subcampo tiene un tipo en el que la longitud es implcita, o v Los atributos del subcampo estn definidos en otro lugar, o v Se est definiendo una estructura de datos. La longitud de la estructura de datos es el valor mximo del subcampo A-posiciones. nnnnnnn Las posiciones 33-39 pueden contener un valor numrico (justificado a la derecha) entre 1 y 65535 para una estrctura de datos con nombre (y entre 1 y 9999999 para una estructura de datos sin nombre), del modo siguiente:

234

VisualAge RPG Consulta del lenguaje

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.

Posicin 40 (Tipo de datos internos)


Esta entrada le permite especificar cmo se almacena internamente un campo autnomo o un subcampo de estructura de datos. Esta entrada pertenece estrictamente a la representacin interna del elemento de datos que se est definiendo, independientemente de cmo se ha almacenado externamente el elemento de datos (es decir, si se ha almacenado externamente). Para definir el formato de tipo carcter, grfico y UCS-2 de longitud variable, debe especificar la palabra clave VARYING; de lo contrario, el formato ser de longitud fija. Entrada Explicacin
Captulo 18. Especificaciones de definicin

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

Posiciones 41-42 (Posiciones decimales)


Las posiciones 41-42 se utilizan para indicar el nmero de posiciones decimales en un subcampo numrico o en un campo autnomo. Si el campo es numrico, debe haber siempre una entrada en estas posiciones; si no hay posiciones decimales, entre un 0. Entrada Explicacin Blanco El valor no es numrico o se ha definido con la palabra clave LIKE. 0-30 Posiciones decimales: el nmero de posiciones a la derecha del decimal en un campo numrico.

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

VisualAge RPG Consulta del lenguaje

Posiciones 44-80 (Palabras clave)


Las posiciones 44 a 80 se proporcionan para las palabras clave de especificacin de definicin. Las palabras clave se utilizan para describir y definir datos y sus atributos. Consulte Palabras clave de especificacin de definicin para obtener una descripcin de cada palabra clave. Utilice esta rea para especificar cualquier palabra clave necesaria para definir por completo el campo.

Palabras clave de especificacin de definicin


Las palabras clave de especificacin de definicin pueden no tener parmetros, tener parmetros opcionales o tener parmetros necesarios. La sintaxis de las palabras clave es la siguiente:
Palabra clave(parmetro1 : parmetro2)

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).

Captulo 18. Especificaciones de definicin

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

VisualAge RPG Consulta del lenguaje

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

Captulo 18. Especificaciones de definicin

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

VisualAge RPG Consulta del lenguaje

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

VisualAge RPG Consulta del lenguaje

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

Captulo 18. Especificaciones de definicin

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

VisualAge RPG Consulta del lenguaje

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

Figura 85. Especificacin del nombre externo de un procedimiento de prototipo

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.

Prototipos de mtodos Java


Los mtodos Java deben ser prototipos para que las aplicaciones Java de VARPG puedan llamarlos correctamente. El compilador debe conocer el nombre del mtodo, la clase a la que pertenece, los tipos de datos de los parmetros y el tipo de datos del valor de retorno (si lo hubiera), as como si el mtodo es esttico o no. Para especificar el nombre del mtodo y la clase a la que pertenece, se utiliza la palabra clave EXTPROC extendida. El formato de la palabra clave EXTPROC es:
EXTPROC(*JAVA:nombre_clase:nombre_mtodo | *JAVARPG:nombre_clase:nombre_mtodo)

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

VisualAge RPG Consulta del lenguaje

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.

Captulo 18. Especificaciones de definicin

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

VisualAge RPG Consulta del lenguaje

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 *

Figura 86. Definicin de campos LIKE como otros campos

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.

MSGNBR(*MSGnnnn o nombre de campo)


La palabra clave MSGNBR define el nmero de mensaje utilizado en el factor 1 del cdigo de operacin DSPLY. El nmero de mensaje puede tener una longitud mxima de 4 dgitos. Debe especificar uno de los elementos siguientes: v El identificador de mensaje (por ejemplo, *MSG0001) v Un campo que contenga el nmero de mensaje (por ejemplo, *MSG0001) Si el mensaje tiene texto de sustitucin, utilice las palabras clave MSGNBR y MSGDATA conjuntamente.

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

VisualAge RPG Consulta del lenguaje

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.

Captulo 18. Especificaciones de definicin

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.

DS1 APARICIN 1 PUNTERO FLD5 (rellenar)

DS1 APARICIN 2 PUNTERO FLD5 (rellenar)

DS2 APARICIN 1 CAR4 CAR5

DS2 APARICIN 2 CAR4 CAR5

Figura 87. Asignacin de almacenamiento de estructuras de datos de mltiples apariciones con subcampos de puntero

OPTIONS(*OMIT *VARSIZE *STRING *RIGHTADJ)


La palabra clave OPTIONS se utiliza para especificar: v Si puede pasarse el valor especial *OMIT para el parmetro pasado por referencia v Si un parmetro que se pasa mediante referencia puede ser de longitud ms corta de lo que se ha especificado en el prototipo. v Si el programa o procedimiento llamado espera un puntero para una serie con terminacin de nulo, permitiendo especificar una expresin de carcter como el puntero pasado. No puede especificarse la palabra clave OPTIONS sin un parmetro. Se puede especificar ms de un parmetro en una especificacin de definicin, pero cada parmetro debe ser diferente. El valor puede ser *OMIT, *STRING, *VARSIZE o *RIGHTADJ. Cuando se especifica OPTIONS(*OMIT), se permite el valor *OMIT para dicho parmetro. *OMIT slo est permitido para parmetros CONST y parmetros que se pasan por referencia. OPTIONS(*VARSIZE) slo es vlido para los parmetros pasados por referencia que tengan un tipo de datos carcter, grfico o UCS-2 o que representen una matriz de cualquier tipo. Cuando se especifica OPTIONS(*VARSIZE), el parmetro pasado puede tener una longitud menor o mayor que la definida en el prototipo. Asegurarse de que se accede slo a los datos que se han pasado exactamente depende del programa o subprocedimiento al que se llame. Para comunicar el volumen de datos que se ha pasado, se puede pasar un parmetro ms que contenga la longitud o bien utilizar los descriptores operativos del subprocedimiento. Si se trata de campos de

252

VisualAge RPG Consulta del lenguaje

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.

Captulo 18. Especificaciones de definicin

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

Figura 88. Utilizacin de OPTIONS(*OMIT)

El ejemplo siguiente muestra cmo codificar un prototipo y un procedimiento que permitan parmetros de longitud variable, con OPTIONS(*VARSIZE).

254

VisualAge RPG Consulta del lenguaje

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

Figura 89. Utilizacin de OPTIONS(*VARSIZE) (Pieza 1 de 2)

Captulo 18. Especificaciones de definicin

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

Figura 89. Utilizacin de OPTIONS(*VARSIZE) (Pieza 2 de 2)

El ejemplo siguiente muestra cmo utilizar OPTIONS(*STRING) para codificar prototipo y un procedimiento que utilicen una serie terminada en nulo variable.

256

VisualAge RPG Consulta del lenguaje

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

Figura 90. Utilizacin de OPTIONS(*STRING)

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.

Captulo 18. Especificaciones de definicin

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

VisualAge RPG Consulta del lenguaje

*.. 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)

Figura 93. Definicin de posiciones solapadas de subcampos con *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

VisualAge RPG Consulta del lenguaje

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).

Captulo 18. Especificaciones de definicin

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.

Resumen segn el tipo de especificacin de definicin


La Tabla 31 en la pgina 263 lista las entradas obligatorias y permitidas para cada tipo de especificacin de definicin. La Tabla 32 en la pgina 263 y la Tabla 33 en la pgina 264 contienen las listas de las palabras clave permitidas para cada tipo de especificacin de definicin. En cada una de estas tablas, una R indica que es obligatoria una entrada en estas posiciones y, una A indica que se permite una entrada en estas posiciones.

262

VisualAge RPG Consulta del lenguaje

Tabla 31. Entradas obligatorias/permitidas para cada Tipo de especificacin de definicin


Tipo Pos. 7-21 Nombre Pos. 22 Externa Pos. 23 Tipo DS Pos. 24-25 Tipo Defn. R A Pos. 26-32 De Pos. Pos. 40 33-39 A / Tipo de Longitud datos A A A A Pos. 41-42 Pos. decimal Pos. 44-80 Palabras clave A A

Estructura de datos Subcampo de estructura de datos Subcampo externo Campo autnomo

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

Constante con R nombre Prototipo Parmetro de prototipo R A

Interfaz de A procedimiento Parmetro de R interfaz de procedimiento

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

Captulo 18. Especificaciones de definicin

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

Tabla 33. Palabras clave de prototipo, interfaz de procedimiento y parmetro


Palabra clave ASCEND CLTPGM CONST DATFMT DESCEND A A A A A A Prototipo (PR) Interfaz de procedimiento (PI) Parmetro PR o PI A

264

VisualAge RPG Consulta del lenguaje

Tabla 33. Palabras clave de prototipo, interfaz de procedimiento y parmetro (continuacin)


Palabra clave DIM EXTPROC LIKE NOOPT OPTIONS PROCPTR TIMFMT VALUE VARYING A A A A A A Prototipo (PR) A A A A A A A A A A A Interfaz de procedimiento (PI) A Parmetro PR o PI A

Captulo 18. Especificaciones de definicin

265

266

VisualAge RPG Consulta del lenguaje

Captulo 19. Especificaciones de entrada


En un archivo de entrada descrito por programa, las especificaciones de entrada describen los tipos de registro del archivo, los datos de un campo y los indicadores basados en el contenido de los campos. En un archivo descrito externamente, las especificaciones de entrada son opcionales y pueden utilizarse para aadir funciones a la descripcin externa. Hallar informacin detallada sobre las especificaciones de entrada en: v Archivos descritos por programa en la pgina 268 v Archivos descritos externamente en la pgina 276

Sentencia de especificacin de entrada


La disposicin general de la especificacin de salida es: v El tipo de especificacin de entrada (I) se entra en la posicin 6 v La seccin no de comentario de la especificacin abarca de la posicin 7 a la posicin 80 v La seccin de comentarios de la especificacin abarca de la posicin 81 a la posicin 100.

Descrito por programa


En los archivos descritos por programa, las entradas de la especificaciones de entrada se dividen en dos categoras: v Las entradas de identificacin de registro (posiciones 7 a 46), que describen el registro de entrada y su relacin con otros registros del archivo.
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 IFilename++Sq..RiPos1+NCCPos2+NCCPos3+NCC..................................Comments++++++++++++ I.........And..RiPos1+NCCPos2+NCCPos3+NCC..................................Comments++++++++++++

Figura 94. Diseo de registro descrito por programa

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++++++++++++

Figura 95. Diseo de campo descrito por programa

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.

Copyright IBM Corp. 1994, 2000

267

*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 IRcdname+++....Ri..........................................................Comments++++++++++++

Figura 96. Diseo de registro descrito externamente

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++++++++++++

Figura 97. Diseo de campo descrito externamente

Archivos descritos por programa


Los archivos descritos por programa incluyen las entradas siguientes en las especificaciones de entrada:

Posicin 6 (Tipo de formulario)


Debe aparecer una I en la posicin 6 para identificar esta lnea como una sentencia de especificacin de entrada.

Entradas de identificacin de registro


Las entradas de identificacin de registro (posiciones 7 a 46) para un archivo descrito por programa describen el registro de entrada y su relacin con otros registros del archivo.

Posiciones 7-16 (Nombre de archivo)


Entrada Explicacin Un nombre de archivo vlido Es el mismo nombre de archivo que aparece en las especificaciones de descripcin de archivo para el archivo de entrada. Entre el nombre del archivo a describir en estas posiciones. Este nombre debe ser el mismo que el que se ha definido para el archivo en las especificaciones de descripcin de archivo. Este debe ser un archivo de entrada, un archivo de actualizacin o un archivo combinado. El nombre de archivo debe entrarse en la primera lnea de identificacin de registro de cada archivo y puede entrarse en las lneas de identificacin de registro subsiguientes de dicho archivo. Todas las entradas que describan un archivo de entrada deben aparecer juntas; no pueden mezclarse con las entradas de otros archivos.

Posiciones 16-18 (Relacin lgica)


Entrada Explicacin AND OR Se utilizan ms de tres cdigos de identificacin. Dos o ms tipos de registros tienen campos comunes.

268

VisualAge RPG Consulta del lenguaje

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.

Posiciones 17-18 (Secuencia)


Entrada Explicacin Cualquier par de caracteres alfanumricos No se efecta una comprobacin de secuencia especial

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.

Posiciones 21-22 (Indicador de identificacin de registro)


Entrada Explicacin Blanco No se utiliza indicador 01-99 LR Indicador general Indicador de nivel de control utilizado para un indicador de identificacin de registro

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.

Posiciones 23-46 (Cdigos de identificacin de registro)


Las entradas de las posiciones 23 a 46 identifican cada tipo de registro del archivo de entrada. En cada lnea de especificacin se pueden entrar de uno a tres cdigos
Captulo 19. Especificaciones de entrada

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.

Posiciones 23-27, 31-35 y 39-43 (Posicin)


Entrada Blanco 1-32766 Explicacin El cdigo de identificacin de registro no est presente. Esta es la posicin que contiene el cdigo de identificacin del registro. La posicin que contiene el cdigo debe estar contenida en la longitud de registro especificada para el archivo. Esta entrada debe ajustarse a la derecha, pero pueden omitirse los ceros iniciales.

Posiciones 28, 36 y 44 (No)


Entrada Explicacin Blanco El cdigo de identificacin de registro debe estar presente. N Una N en esta posicin significa que el cdigo de identificacin de registro no debe estar presente en la posicin de registro especificada.

Posiciones 29, 37 y 45 (Componente de cdigo)


Esta entrada especifica qu componente del carcter del cdigo de identificacin de registro se ha de comprobar.

270

VisualAge RPG Consulta del lenguaje

Entrada Explicacin C D Todo el carcter Dgito

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.

Posiciones 30, 38 y 46 (Carcter)


Una entrada en esta posicin indica el carcter de identificacin que se compara con el carcter de la posicin especificada en el registro de entrada. La comprobacin de tipo de registro comienza por el primer tipo de registro especificado. Si los datos de un registro satisfacen ms de un grupo de cdigos de identificacin de registro, el primer tipo de registro satisfecho determina los tipos de registro. Cuando para un archivo se especifica ms de un tipo de registro, los cdigos de identificacin de registro deben codificarse de modo que cada registro de entrada tenga una serie exclusiva de cdigos de identificacin.

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.

Captulo 19. Especificaciones de entrada

271

Entradas de descripcin de campo


Las entradas de descripcin de campo (posiciones 31 a 74) deben seguir a las entradas de identificacin de registro (posiciones 7 a 46) para cada archivo.

Posicin 6 (Tipo de formulario)


Debe aparecer una I en la posicin 6 para identificar esta lnea como una sentencia de especificacin de entrada.

Posiciones 7-30 (Reservado)


Las posiciones 7-30 deben estar en blanco.

Posiciones 31-34 (Atributos de datos)


Las posiciones 31-34 especifican el formato externo para un campo de fecha, hora, carcter de longitud variable, grfico o UCS-2. Si esta entrada est en blanco para un campo de fecho o de hora, se utiliza el formato/separador especificado para el archivo (con DATFMT o TIMFMT o ambas). Si no se ha especificado ningn formato externo de fecha u hora para el archivo, se emite un mensaje de error. Consulte Datos de fecha en la pgina 112 y Datos de hora en la pgina 126 para obtener informacin sobre formatos de fecha y hora. La de 1. 2. jerarqua utilizada para determinar el formato externo y el separador de campos fecha y hora proviene de: El formato de fecha y el separador especificado en las posiciones 31-35 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 externo determinado anteriormente al formato interno del campo de fecha/hora. En el caso de los datos de tipo carcter, grfico o UCS-2, se utiliza el atributo de datos *VAR para especificar campos de entrada de longitud variable. Si esta entrada est en blanco para los datos de tipo carcter, grfico o UCS-2, el formato externo debe ser de longitud fija. El formato interno y externo debe coincidir, si el campo se define en cualquier otra parte del programa. 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. Para obtener ms informacin acerca de los formatos externos, vea Formatos internos y externos en la pgina 95.

Posicin 35 (Separador fecha/hora)


La posicin 35 especifica un carcter separador que se utilizar para los campos de fecha/hora. Puede utilizarse el smbolo & para especificar un separador en blanco. Consulte Datos de fecha en la pgina 112 y Datos de hora en la pgina 126 para formatos de fecha y hora y sus separadores por omisin.

272

VisualAge RPG Consulta del lenguaje

Para efectuar una entrada en este campo, debe realizarse tambin una entrada en las posiciones 31-34 (formato de fecha/hora externo).

Posicin 36 (Formato de datos)


El campo de entrada es: Entrada Explicacin Blanco Formato decimal con zona o carcter A N G C B F I L P R S U D T Z Campo de tipo carcter (formato de longitud variable o fija) Campo de tipo carcter (formato indicador) Campo grfico (formato de longitud variable o fija) Campo UCS-2 (formato de longitud variable o fija) Formato binario Campo numrico (formato flotante) Formato numrico (formato de entero) Campo numrico precedido (izquierda) de un signo ms o de un signo menos (formato decimal con zona) Campo numrico (formato decimal empaquetado) Campo numrico seguido (derecha) por un signo ms o por un signo menos (formato decimal con zona) Campo numrico (campo decimal con zona) Campo numrico (formato sin signo) Campo de fecha el formato externo de la fecha se especifica en las posiciones 3134 o el formato de fecha del archivo por omisin. Campo de hora el formato externo de la hora se especifica en las posiciones 3134 o el formato de hora del archivo por omisin. Campo de indicacin de la hora

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.

Posiciones 37-46 (Ubicacin de campo)


Entrada Explicacin Dos nmeros de 1-5 dgitos Inicio de un campo (desde) y fin de un campo (a). Esta entrada describe la ubicacin y el tamao de cada campo del registro de entrada. Las posiciones 37 a 41 especifican la ubicacin de la posicin inicial del campo; las posiciones 42 a 46 especifican la ubicacin de la posicin final del campo. Para definir un campo de una sola posicin, entre el mismo nmero en las posiciones 37 a 41 y en las posiciones 42 a 46. Las entradas numricas deben ajustarse por la derecha; pueden omitirse los ceros iniciales.
Captulo 19. Especificaciones de entrada

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.

Posiciones 47-48 (Posiciones decimales)


Entrada Explicacin Blanco Campo de tipo carcter, grfico, UCS-2, flotante, fecha, hora o indicacin de la hora. 0-30 Nmero de posiciones decimales del campo numrico.

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.

Posiciones 49-62 (Nombre de campo)


Entrada Explicacin

274

VisualAge RPG Consulta del lenguaje

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.

Posiciones 63-64 (Reservadas)


Entrada Explicacin Blanco Esta entrada debe estar en blanco.

Posiciones 65-66 (Reservadas)


Entrada Explicacin Blanco Esta entrada debe estar en blanco.

Posiciones 67-68 (Relacin de registro de campo)


Entrada Explicacin Blanco El campo es comn a todos los tipos de registro. 01-99 Indicadores generales.

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.

Captulo 19. Especificaciones de entrada

275

Posiciones 69-74 (Indicadores de campo)


Entrada Explicacin Blanco No se ha especificado un indicador 01-99 Indicadores generales

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.

Archivos descritos externamente


Los archivos descritos externamente incluyen las entradas siguientes en las especificaciones de entrada.

Posicin 6 (Tipo de formulario)


Debe aparecer una I en la posicin 6 para identificar esta lnea como una sentencia de especificacin de entrada.

Entradas de identificacin de registro


Cuando se recupera la descripcin de un archivo descrito externamente, se recuperan tambin las definiciones de registro. Para hacer referencia a las definiciones de registro, especifique el nombre del formato de registro de las especificaciones de entrada, de clculo y de salida del programa. Se requieren las especificaciones de entrada para un archivo descrito externamente si: v Se han de especificar indicadores de identificacin de registro v Se ha de redenominar para el programa un campo contenido en un registro v Se han de utilizar indicadores de campo. Para un archivo descrito externamente, las especificaciones de descripcin de campo deben seguir inmediatamente a la especificacin de identificacin de registro. Una lnea de registro para un archivo descrito externamente define el inicio de las especificaciones de alteracin temporal para el registro. Todas las especificaciones

276

VisualAge RPG Consulta del lenguaje

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.

Posiciones 7-16 (Nombre de registro)


Entre uno de estos valores: v El nombre externo del formato de registro. Este nombre de archivo no puede utilizarse para un archivo descrito externamente. v El nombre especificado por la palabra clave RENAME en las especificaciones de descripcin de archivo si se ha redenominado el formato de registro externo. Un nombre de formato de registro puede aparecer slo una vez en las posiciones 7 a 16 de las especificaciones de entrada para un programa.

Posiciones 17-20 (Reservadas)


Las posiciones 17 a 20 deben estar en blanco.

Posiciones 21-22 (Indicador de identificacin de registro)


La especificacin de los indicadores de identificacin de registro en esta posicin es opcional, pero si est presente, sigue las reglas para los . archivos descritos por programa. Consulte el apartado Archivos descritos por programa en la pgina 268.

Posiciones 23-80 (Reservadas)


Las posiciones 23-80 deben estar en blanco.

Entradas de descripcin de campo


Las especificaciones de descripcin de campo para un archivo descrito externamente pueden utilizarse para redenominar un campo de un registro de un programa o para especificar funciones de indicador de campo. Las definiciones de campo (atributos) se recuperan del archivo descrito externamente y no las puede cambiar el programa. Si los atributos de un campo no son vlidos para un programa VisualAge RPG (como, por ejemplo, la longitud numrica tiene ms de 30 dgitos), el campo no se puede utilizar. La comprobacin de diagnstico se lleva a cabo en los campos contenidos en un formato de registro externo del mismo modo que para las sentencias fuente. Normalmente, los campos de entrada descritos externamente se leen durante las operaciones de entrada slo si el campo se utiliza realmente en alguna parte del programa.

Posiciones 7-20 (Reservadas)


Las posiciones 7 a 20 deben estar en blanco.

Posiciones 21-30 (Nombre de campo externo)


Si se ha de cambiar el nombre de un campo contenido en un registro de un archivo descrito externamente, entre el nombre externo del campo en estas posiciones. Un campo puede tener que cambiar de nombre si el nombre es el mismo que el del campo especificado en el programa y son necesarios dos nombres diferentes.

Captulo 19. Especificaciones de entrada

277

Posiciones 31-48 (Reservadas)


Las posiciones 31 a 48 deben estar en blanco.

Posiciones 49-62 (Nombre de campo)


La entrada de nombre de campo slo se efecta cuando se requiere para funciones como, por ejemplo, niveles de control aadidos a la descripcin externa. La entrada de nombre de campo contiene uno de los siguientes valores: v El nombre del campo como est definido en la descripcin de registro externa (si tiene 10 caracteres o menos) v El nombre especificado para ser utilizado en el programa que ha sustituido al nombre externo especificado en las posiciones 21 a 30. El nombre de campo debe cumplir las reglas para la utilizacin de nombres simblicos. Los indicadores no pueden tener posibilidad de nulos.

Posiciones 63-64 (Reservadas)


Entrada Explicacin Blanco Esta entrada debe estar en blanco.

Posiciones 65-66 (Reservadas)


Entrada Explicacin Blanco Esta entrada debe estar en blanco.

Posiciones 67-68 (Reservadas)


Las posiciones 67 y 68 deben estar en blanco.

Posiciones 69-74 (Indicadores de campo)


Entrada Explicacin Blanco No se ha especificado un indicador 01-99 Indicadores generales

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

VisualAge RPG Consulta del lenguaje

Posiciones 75-80 (Reservadas)


Las posiciones 75 a 80 deben estar en blanco.

Captulo 19. Especificaciones de entrada

279

280

VisualAge RPG Consulta del lenguaje

Captulo 20. Especificaciones de clculo


Las especificaciones de clculo indican las operaciones que se llevan a cabo en los datos de un programa. En Captulo 25. Cdigos de operacin en la pgina 367 hallar informacin ms detallada acerca de cmo se deben especificar las especificaciones de clculo para cdigos de operaciones individuales.

Sentencia de especificacin de clculo


La disposicin general para la especificacin de clculo es la siguiente: v El tipo de especificacin de clculo (C) se indica en la posicin 6 v La parte no de comentario de la especificacin abarca de la posicin 7 a la posicin 80. Estas posiciones estn divididas en tres partes que especifican lo siguiente: Cundo se llevan a cabo los clculos: Los indicadores de condicionamiento especificados de la posicin 7 a la posicin 11 determinan cundo y bajo qu condiciones se llevarn a cabo los clculos. Qu tipo de clculos se realizan: Las entradas especificadas desde la posicin 12 hasta la posicin 70 (12 a 80 para las operaciones que utilizan el factor 2 ampliado, vea Sentencia de especificacin del Clculo del factor 2 ampliado en la pgina 286 y Operaciones que utilizan expresiones en la pgina 380) indican el tipo de clculos que se han llevado a cabo, los datos (tales como campos o archivos) en los que se ha basado la operacin y el campo que contiene los resultados del clculo. Qu pruebas se realizan con los resultados de la operacin: Los indicadores especificados en las posiciones 71 a 76 se utilizan para comprobar los resultados de los clculos y pueden condicionar los clculos y operaciones de salida subsiguientes. Las posiciones de indicador resultante tienen diferentes utilizaciones, dependiendo del cdigo de operacin. v La seccin de comentarios de la especificacin abarca de la posicin 81 a la 100
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....Comments++++++++++++ CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++++Comments++++++++++++

Figura 98. Diseo de especificacin de clculo

Especificacin de clculo Factor 2 ampliado Lnea de continuacin


El campo Factor 2 ampliado puede continuarse en las lneas siguientes de la manera siguiente: v La posicin 6 de la lnea de continuacin debe contener una C v Las posiciones 7 a 35 de la lnea de continuacin deben estar en blanco v La especificacin contina en o despus de la posicin 36

Copyright IBM Corp. 1994, 2000

281

*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 C.............................Extended-factor2-continuation++++++++++++++++Comments++++++++++++

Figura 99. Especificacin de clculo Factor 2 ampliado Lnea de continuacin

Posicin 6 (Tipo de formulario)


Debe aparecer una C en la posicin 6 para identificar esta lnea como una sentencia de especificacin de clculo.

Posiciones 7-8 (Nivel de control)


Entrada Blanco Explicacin La operacin de clculo se lleva a cabo si los indicadores de las posiciones 9 a 11 lo permiten o el clculo forma parte de una subrutina. Tambin se utiliza un blanco para los cdigos de operacin declarativos. La operacin de clculo forma parte de una subrutina. Tambin es vlida una entrada en blanco para los clculos que forman parte de un subrutina. Los indicadores situados en ms de una lnea condicionan el clculo.

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.

Identificador de lneas AND/OR


Las posiciones 7 y 8 pueden contener AN u OR para definir indicadores adicionales (posiciones 9 a 11) para un clculo. La entrada en las posiciones 7 y 8 de la lnea que precede inmediatamente una lnea AND/OR o un grupo de lneas AND/OR determina cundo se ha de procesar el clculo. La entrada en las posiciones 7 y 8 de la primera lnea de un grupo se aplica a todas las lneas AND/OR del grupo.

Posiciones 9-11 (Indicadores)


Las posiciones 10 y 11 contienen un indicador que se comprueba para determinar si se ha de procesar un clculo determinado: Entrada Explicacin Blanco La operacin se procesa en todos los registros 01-99 LR Indicadores generales Indicador de ltimo registro

282

VisualAge RPG Consulta del lenguaje

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.

Posiciones 12-25 (Factor 1)


El factor 1 nombra un campo o proporciona datos reales (literales) en los que se lleva a cabo una operacin, o contiene una palabra especial VARPG (por ejemplo, *LOCK) que proporciona informacin adicional sobre cmo se ha de realizar la operacin. La entrada debe comenzar en la posicin 12. Las entradas para el factor 1 dependen del cdigo de operacin especificado en las posiciones 26 a 35. Para las entradas especficas para el factor 1 de un cdigo de operacin determinado, consulte Captulo 25. Cdigos de operacin en la pgina 367. Con algunos cdigos de operacin, se pueden especificar dos operandos separados por dos puntos.

Posiciones 26-35 (Operacin y ampliador)


Las posiciones 26 a 35 especifican la clase de operacin que se llevar a cabo utilizando el factor 1, el factor 2 y las entradas del campo de resultado. El cdigo de operacin debe comenzar en la posicin 26. Si desea ms informacin acerca de los cdigos de operacin, consulte Captulo 25. Cdigos de operacin en la pgina 367.

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

Captulo 20. Especificaciones de clculo

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.

Posiciones 36-49 (Factor 2)


El factor 2 nombra un campo, formato de registro o archivo, o proporciona datos reales en los que se ha de llevar a cabo una operacin, o contiene una palabra especial (por ejemplo *ALL) que ofrece informacin adicional sobre la operacin que se llevar a cabo. La entrada debe comenzar en la posicin 36. Las entradas vlidas para el factor 2 dependen del cdigo de operacin especificado en las posiciones 26 a 35. Con algunos cdigos de operacin, se pueden especificar dos operandos separados por dos puntos. Para ver las entradas especficas para el factor 2 de un cdigo de operacin determinado, consulte el Captulo 25. Cdigos de operacin en la pgina 367

Posiciones 50-63 (Campo del resultado)


El campo de resultado nombra el campo o formato de registro que contiene el resultado de la operacin de clculo especificada en las posiciones 26 a 35. El campo especificado debe ser modificable. Por ejemplo, no puede ser un campo de fecha de usuario. Con algunos cdigos de operacin, se pueden especificar dos

284

VisualAge RPG Consulta del lenguaje

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.

Posiciones 64-68 (Longitud de campo)


Entrada 1-30 1-65535 Blanco Explicacin Longitud de campo numrico. Longitud de campo de caracteres. El campo de resultado se define en otro lugar o no puede definirse un campo utilizando este cdigo de operacin

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.

Posiciones 69-70 (Posiciones decimales)


Entrada Explicacin Blanco El campo de resultado son datos de caracteres, se ha definido en otro lugar del programa o no se ha especificado una longitud de campo. 0-30 Nmero de posiciones decimales de un campo de resultado numrico: v Si el campo de resultado numrico no contiene posiciones decimales, entre un 0 (cero). v El nmero de posiciones decimales especificadas no puede sobrepasar la longitud del campo.

Las posiciones 69-70 indican el nmero de posiciones a la derecha del decimal de un campo de resultado numrico.

Posiciones 71-76 (Indicadores resultantes)


Estas posiciones se pueden utilizar para comprobar el valor de un campo de resultado despus de la finalizacin de una operacin o para indicar condiciones como fin de archivo, error o registro no encontrado. En algunas operaciones, puede controlar el modo en que se lleva a cabo la operacin especificando combinaciones diferentes de tres indicadores resultantes (por ejemplo, LOOKUP). Las posiciones de indicador resultante tienen utilizaciones diferentes, dependiendo del cdigo de
Captulo 20. Especificaciones de clculo

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.

Sentencia de especificacin del Clculo del factor 2 ampliado


Ciertos cdigos de operacin permiten utilizar una expresin en el campo del factor 2 ampliado.

Posiciones 7-8 (Nivel de control)


Consulte el apartado Posiciones 7-8 (Nivel de control) en la pgina 282.

Posiciones 9-11 (Indicadores)


Consulte el apartado Posiciones 9-11 (Indicadores) en la pgina 282.

Posiciones 12-25 (Factor 1)


El factor 1 debe estar en blanco.

Posiciones 26-35 (Operacin y ampliador)


Las posiciones 26 a 35 especifican la clase de operacin que se ha de llevar a cabo utilizando la expresin del campo del factor 2 ampliado. El cdigo de operacin debe comenzar en la posicin 26. Si desea ms informacin acerca de los cdigos de operacin, consulte Captulo 25. Cdigos de operacin en la pgina 367. El programa procesa las operaciones en el orden especificado en el formulario de especificaciones de clculo.

Ampliador de operacin
Entrada Explicacin

286

VisualAge RPG Consulta del lenguaje

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.

Posiciones 36-80 (Factor 2 ampliado)


En este campo se utiliza una sintaxis de formato libre. Consta de combinaciones de operandos y operadores y puede abarcar opcionalmente varias lneas. Si se especifica en varias lneas, las lneas de continuacin deben estar en blanco en las posiciones que van de la 7 a la 35 Las operaciones que toman un factor 2 ampliado son: 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 Vea los cdigos de operacin especficos para obtener ms informacin. En Reglas de continuacin en la pgina 195 hallar ms informacin acerca de la codificacin de lneas de continuacin.

Captulo 20. Especificaciones de clculo

287

288

VisualAge RPG Consulta del lenguaje

Captulo 21. Especificaciones de salida


Las especificaciones de salida describen el registro y el formato de los campos de un archivo de salida descrito por programa e indican cundo se ha de grabar el registro. Las especificaciones de salida son opcionales para un archivo descrito externamente. Si se codifica NOMAIN en una especificacin de control, nicamente se puede llevar a cabo la salida de excepciones. Las especificaciones de salida pueden dividirse en dos categoras: identificacin y control de registro (posiciones 7 a 51) y descripcin y control de campo (posiciones 21 a 80). Estas especificaciones se entran en las especificaciones de salida. Puede encontrar una informacin detallada sobre las especificaciones de salida en: v Archivos descritos por programa en la pgina 290. v Archivos descritos externamente en la pgina 300. Para los archivos de salida se aplican las reglas siguientes: v Archivos DISK: Los archivos DISK pueden ser remotos o locales Los archivos remotos deben estar descritos externamente Los archivos locales deben estar descritos por programa v Archivos PRINTER: Los archivos PRINTER deben estar descritos por programa v Archivos SPECIAL: Los archivos SPECIAL deben estar descritos por programa.

Sentencia de especificacin de salida


La disposicin general de la especificacin de salida es la siguiente: v El tipo de especificacin de salida (O) se indica en la posicin 6 v La parte no de comentario de la especificacin abarca de la posicin 7 a la 80 v La seccin de comentarios de la especificacin abarca de la posicin 81 a la 100

Descrito por programa


En los archivos descritos por programa, las entradas de la especificaciones de salida se dividen en dos categoras: v Identificacin y control de registro (posiciones de la 7 a la 51)
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 OFilename++EF..N01N02N03Excnam++++B++A++Sb+Sa+.............................Comment+++++++++++++ OFilename++EAddN01N02N03Excnam++++.........................................Comment+++++++++++++ O.........And..N01N02N03Excnam++++.........................................Comment+++++++++++++

Figura 100. Diseo de registro descrito por programa

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.

Copyright IBM Corp. 1994, 2000

289

*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 O..............N01N02N03Field+++++++++YB.End++PConstant/editword/DTformat++Comment+++++++++++++ O..............................................Constant/editword-ContinutioComment+++++++++++++

Figura 101. Diseo de campo descrito por programa

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+++++++++++++

Figura 102. Diseo de registro descrito externamente

v Descripcin y control de campo (posiciones de la 21 a la 43 y 45).


*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 O..............N01N02N03Field+++++++++.B...................................Comment+++++++++++++

Figura 103. Diseo de campo descrito externamente

Archivos descritos por programa


Los archivos descritos por programa incluyen las entradas siguientes en las especificaciones de salida.

Posicin 6 (Tipo de formulario)


Debe aparecer una O en la posicin 6 para identificar esta lnea como una sentencia de especificaciones de salida.

Identificacin de registro y entradas de control


Las entradas de las posiciones 7 a 51 identifican los registros de salida que componen los archivos, proporcionan el espaciado correcto en los informes impresos y determinan bajo qu condiciones se han de grabar los registros.

Posiciones 7-16 (Nombre de archivo)


Entrada Explicacin Un nombre de archivo Especifique el nombre de archivo en la primera lnea que define un registro de salida para el archivo. El nombre de archivo especificado debe ser el mismo nombre de archivo asignado al archivo de salida, de actualizacin o combinado de las especificaciones de descripcin de archivo. Si en las especificaciones de salida los registros de archivos estn mezclados, el nombre de archivo debe especificarse cada vez que se cambie el archivo.

290

VisualAge RPG Consulta del lenguaje

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.

Posiciones 16-18 (Relacin lgica)


Entrada Explicacin AND u OR AND/OR indica una relacin entre las lneas de los indicadores de salida. Las lneas AND/OR son vlidas para registros de salida, pero no para campos. Para especificar esta relacin, entre AND/OR en las posiciones 16 a 18 en cada lnea adicional a continuacin de la lnea que contiene el nombre de archivo. Debe especificarse como mnimo un indicador en cada lnea AND. Puede especificarse un nmero ilimitado de lneas AND/OR en las especificaciones de salida. Las posiciones 7 a 15 deben estar en blanco cuando se especifica AND/OR.

Posicin 17 (Tipo - Archivo descrito por programa)


Entrada Explicacin E Los registros de excepcin se graban durante el proceso de clculo. Los registros de excepcin slo pueden especificarse cuando se utiliza el cdigo EXCEPT. Consulte Captulo 25. Cdigos de operacin en la pgina 367 para obtener ms informacin sobre el cdigo de operacin EXCEPT.

Posiciones 18-20 (Adicin/supresin de registro)


Entrada Explicacin ADD Aade un registro al archivo de entrada, archivo de salida, archivo de actualizacin o subarchivo. En el caso de los archivos locales, todos los registros se aaden al final del archivo. Las actualizaciones se efectan en el registro actual. Suprime el ltimo registro que se ha ledo del archivo. El registro suprimido no se puede recuperar, ya que se elimina del sistema.

DEL

Posiciones 21-29 (Indicadores ID de registro de archivo)


Entrada Explicacin Blanco La lnea o el campo se convierte en salida cada vez que se lleva a cabo una comprobacin de salidas del registro. 01-99 LR Se utiliza un indicador general como indicador de resultados, indicador de campo o indicador de identificacin de registros. Indicador de ltimo registro.

Captulo 21. Especificaciones de salida

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.

Posiciones 30-39 (Nombre EXCEPT)


Cuando un tipo de registro es un registro de excepcin (indicado mediante una E en la posicin 17), puede colocarse un nombre en estas posiciones de la lnea de registro. La operacin EXCEPT puede especificar como salida el nombre asignado a un grupo de registros. Este nombre se denomina un nombre EXCEPT. Un nombre EXCEPT debe seguir las reglas de utilizacin de nombres simblicos. Un grupo de cualquier nmero de registros de salida puede utilizar el mismo nombre EXCEPT y los registros no han de ser registros consecutivos. Cuando se especifica la operacin EXCEPT sin un nombre EXCEPT, slo se comprueban y graban aquellos registros de excepcin que no tengan un nombre EXCEPT si se satisfacen los indicadores de condicin. Cuando la operacin EXCEPT especifica un nombre EXCEPT, slo se comprueban y graban los registros de excepcin con dicho nombre si se satisfacen los indicadores de condicin. El nombre EXCEPT se especifica en la lnea de registro principal y se aplica a todas las lneas AND/OR. Puede utilizarse una operacin EXCEPT sin campos para liberar un bloqueo de registro en un archivo. La operacin UNLOCK tambin puede utilizarse para este

292

VisualAge RPG Consulta del lenguaje

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)

Figura 104. Bloqueo de registro en archivo liberado mediante la operacin EXCEPT

Posiciones 40-51 (Espacio y saltar)


Utilice las posiciones 40 a 51 para especificar espacio y saltar lnea para un archivo de impresora. Espacio se refiere a avanzar una lnea cada vez y saltar a saltar de una lnea de impresin a otra. Si se especifica espacio y saltar para la misma lnea, las operaciones de espacio y saltar se procesan en la secuencia siguiente: 1. Saltar antes 2. Espacio antes 3. Imprimir una lnea 4. Saltar despus 5. Espacio despus. Si en las especificaciones de descripcin de archivo no se especifica la palabra clave PRTCTL (opcin de control de impresora), debe efectuarse una entrada en las siguientes posiciones cuando el dispositivo sea PRINTER: 40-42 (espacio antes), 43-45 (espacio despus), 46-48 (lnea de saltar antes) o 49-51 (lnea de saltar despus). Si la entrada de espacio/saltar se deja en blanco, no se produce la funcin cuya entrada est en blanco (por ejemplo, espacio antes o espacio despus). Si se efectan entradas en las posiciones 40-42 (espacio antes) o en las posiciones 46-51 (saltar antes y saltar despus) y no se efecta una entrada en las posiciones 43 - 45 (espacio despus), no se producir ningn espacio despus de la impresin. Cuando se especifica PRTCTL, se utiliza nicamente en los registros con blancos especificados en las posiciones 40 a 51, Si se especifica lnea de saltar antes o lnea de saltar despus en una nueva pgina, pero la impresora se encuentra en dicha lnea, no se producir el salto.

Posiciones 40-42 (Espacio antes)


Entrada 0 o Blanco 1-255 Explicacin Sin espaciado Valores de espaciado

Posiciones 43-45 (Espacio despus)


Entrada 0 o Blanco Explicacin Sin espaciado
Captulo 21. Especificaciones de salida

293

1-255

Valores de espaciado

Posiciones 46-48 (Saltar antes)


Entrada Explicacin Blanco No se produce un salto. 1-255 Valores de salto.

Posiciones 49-51 (Saltar despus)


Entrada Explicacin Blanco No se produce un salto. 1-255 Valores de salto.

Descripcin de campo y entradas de control


Cada campo se describe en una lnea diferente. Estas entradas determinan bajo qu condiciones y en qu campos de formato de un registro se han de grabar. La informacin de descripcin y control de campo para un campo comienza en la lnea siguiente de la lnea de identificacin de registro.

Posiciones 21-29 (Indicadores de salida)


Los indicadores especificados en las lneas de descripcin de campo determinan si se ha de incluir un campo en el registro de salida, excepto para los campos reservados PAGE. Consulte PAGE, PAGE1-PAGE7 en la pgina 295 para obtener ms informacin sobre cmo los indicadores afectan los campos PAGE. Para controlar los campos pueden utilizarse los mismos tipos de indicadores que se utilizan para controlar registros. Consulte Posiciones 21-29 (Indicadores ID de registro de archivo) en la pgina 291. Los indicadores que se utilizan para condicionar las lneas de descripcin de campo no pueden especificarse en una relacin AND/OR.

Posiciones 30-43 (Nombre de campo)


En las posiciones 30 a 43, utilice una de las entradas siguientes para especificar cada campo que se ha de grabar: v Un nombre de campo v Blancos si se especifica una constante en las posiciones 53 a 80 v Un nombre de tabla, nombre de matriz o elemento de matriz v Una constante con nombre v Las palabras reservadas PAGE, PAGE1 a PAGE7, *PLACE, UDATE, *DATE, UDAY, *DAY, UMONTH, *MONTH, UYEAR, *YEAR, *IN, *INxx o *IN(xx) v Un nombre de estructura de datos o un nombre de subcampo de estructura de datos. Nota: Un campo de puntero no es un campo de salida vlido, es decir, los campos de puntero no pueden grabarse.

294

VisualAge RPG Consulta del lenguaje

Nombres de campo, espacios en blanco, tablas y matrices


Los nombres de campo utilizados deben definirse en el programa. No entre un nombre de campo si se utiliza una constante en las posiciones 53-80. Si se entra un nombre de campo en las posiciones 30 a 43, las posiciones 7 a 20 deben estar en blanco. Pueden especificarse los campos en cualquier orden porque la secuencia en la que aparecen queda determinada por la entrada de las posiciones 47 a 51. Si los campos se solapan, el ltimo campo especificado es el nico campo totalmente grabado. Cuando se especifica un nombre de matriz no indexado, se graba toda la matriz. Un nombre de matriz con un ndice constante o un ndice variable hace que se grabe un elemento. Cuando se especifica un nombre de tabla, se graba el ltimo elemento encontrado en la operacin LOOKUP. El primer elemento de una tabla se graba si no se ha llevado a cabo una operacin LOOKUP satisfactoria. Antes de que se grabe el campo deben satisfacerse las condiciones para un registro y para el campo que contiene.

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.

Palabras reservadas de fecha de usuario


UDATE, *DATE, UDAY, *DAY, UMONTH, *MONTH, UYEAR y *YEAR le permiten proporcionar una fecha para el programa en tiempo de ejecucin. Para obtener ms

Captulo 21. Especificaciones de salida

295

informacin sobre palabras reservadas de fecha de usuario, consulte Palabras especiales de fecha de usuario en la pgina 7.

*IN, *INxx, *IN(xx)


*IN, *INxx y *IN(xx) le permiten hacer referencia a y manipular los indicadores como datos.

Posicin 44 (Cdigos de edicin)


Entrada Blanco 1-4, A-D, J-Q, X, Y, Z Explicacin No se utiliza un cdigo de edicin En los campos numricos se efecta la supresin de ceros y la puntuacin segn un patrn predefinido sin la utilizacin de palabras de edicin.

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.

Posicin 45 (Blanco despus)


Entrada Explicacin Blanco No se restablece el campo. Esta posicin debe estar en blanco para palabras reservadas de fecha de usuario de consulta anticipada, *PLACE, constantes con nombre y literales. B El campo especificado en las posiciones 30 a 43 se restablece con el valor blanco, cero o el valor de fecha/hora/indicacin de la hora por omisin una vez completada la operacin de salida.

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.

Posiciones 47-51 (Posicin final)


Entrada Explicacin 1-n Posicin final

Las posiciones 47 a 51 definen la posicin final de un campo o constante en el registro de salida.

296

VisualAge RPG Consulta del lenguaje

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

Posicin 52 (Formato de datos)


Entrada Explicacin Blanco Esta posicin debe estar en blanco si se especifica edicin. v Para campos numricos, los datos se graban en formato decimal con zona. v Para campos numricos flotantes, los datos se graban en la representacin de pantalla externa. v En los campos de tipo UCS-2, los datos se escribirn en formato UCS-2. v Para campos de fecha, hora e indicacin de la hora, los datos se graban sin realizar conversin de formato. v En los campos de caracteres, los datos se han de grabar como se almacenan. A Slo es vlido para campos de caracteres. El campo de caracteres debe grabarse en formato de longitud fija o variable, dependiendo de la ausencia o la presencia del atributo de datos *VAR. El campo de caracteres se debe grabar en formato de indicador.

Captulo 21. Especificaciones de salida

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.

Posiciones 53-80 (Constante, Palabra de edicin, Atributos de datos)


Las posiciones 53 a 80 se utilizan para especificar una constante, una palabra de edicin o un atributo de datos.

298

VisualAge RPG Consulta del lenguaje

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.

Archivos descritos externamente


Los archivos descritos externamente incluyen las entradas siguientes en las especificaciones de entrada.

Posicin 6 (Tipo de formulario)


Debe aparecer una O en la posicin 6 para identificar esta lnea como una sentencia de especificaciones de salida.

Identificacin de registro y entradas de control


Las especificaciones de salida para un archivo descrito externamente son opcionales. Las entradas en las posiciones 7 a 39 de la lnea de identificacin de registro identifican el formato de registro y determinan en qu condiciones se han de grabar los registros.

Posiciones 7-16 (Nombre de registro)


Entrada Explicacin Nombre de formato de registro vlido Debe especificarse un nombre de formato de registro para un archivo descrito externamente.

Posiciones 16-18 (Relacin lgica externa)


Entrada AND u OR Explicacin AND/OR indica una relacin entre las lneas de los indicadores de salida. Las lneas AND/OR son vlidas para registros de salida pero no para campos.

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.

La posicin 17 indica el tipo de registro que se ha de grabar.

300

VisualAge RPG Consulta del lenguaje

Consulte el apartado Posicin 17 (Tipo - Archivo descrito por programa) en la pgina 291 si desea ms informacin.

Posiciones 18-20 (Adicin de registros)


Entrada Explicacin ADD DEL Aadir un registro a un archivo Suprimir un registro del archivo

Posiciones 21-29 (Indicadores de salida)


Los indicadores de salida para los archivos descritos externamente se especifican del mismo modo que para los archivos descritos por programa. Para obtener ms informacin sobre los indicadores de salida, consulte Posiciones 21-29 (Indicadores ID de registro de archivo) en la pgina 291.

Posiciones 30-39 (Nombre EXCEPT)


Puede especificarse un nombre EXCEPT en estas posiciones para una lnea de registro de excepcin. Consulte el apartado Posiciones 30-39 (Nombre EXCEPT) en la pgina 292 si desea ms informacin.

Descripcin de campo y entradas de control


En los archivos descritos externamente, las nicas descripciones de campo vlidas son los indicadores de salida (posiciones 21 a 29), el nombre de campo (posiciones 30 a 43) y blanco despus (posicin 45).

Posiciones 21-29 (Indicadores de salida)


Los indicadores especificados en las lneas de descripcin de campo determinan si se ha de incluir un campo en el registro de salida. Para controlar los campos se pueden utilizar los mismos tipos de indicadores que se utilizan para controlar registros. Consulte el apartado Posiciones 21-29 (Indicadores ID de registro de archivo) en la pgina 291 si desea ms informacin.

Posiciones 30-43 (Nombre de campo)


Entrada Nombre de campo vlido Explicacin Un nombre de campo especificado para un archivo descrito externamente debe estar presente en la descripcin externa a menos que se haya redenominado el nombre externo para el programa. Especifica la inclusin de todos los campos del registro.

*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.

Captulo 21. Especificaciones de salida

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.

Posicin 45 (Blanco despus)


Entrada Explicacin Blanco No se restablece el campo. B El campo especificado en las posiciones 30 a 43 se restablece con el valor blanco, cero o el valor de fecha/hora/indicacin de la hora por omisin una vez completada la operacin de salida.

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

VisualAge RPG Consulta del lenguaje

Captulo 22. Especificaciones de procedimiento


Las especificaciones de procedimiento se utilizan para definir prototipos de procedimientos especificados despus de la seccin fuente principal, tambin denominados subprocedimientos. El prototipo del subprocedimiento debe estar definido en la seccin fuente principal del mdulo que contiene la definicin del subprocedimiento. Un subprocedimiento incluye lo siguiente: 1. Una especificacin de Inicio de procedimiento (B en la posicin 24 de una especificacin de procedimiento) 2. Una definicin de Interfaz del procedimiento, que especifica el valor de retorno y los parmetros, si procede. La definicin de interfaz de procedimiento es opcional si el subprocedimiento no devuelve un valor y no se le pasa ningn parmetro. La interfaz de procedimiento debe coincidir con el prototipo correspondiente. 3. Otras especificaciones de definicin de variables, constantes y prototipos que necesita el subprocedimiento. Se trata de definiciones locales. 4. Todas las especificaciones de clculo necesarias para llevar a cabo la tarea del procedimiento. Todas las subrutinas incluidas dentro del subprocedimiento son locales. No se pueden utilizar fuera del subprocedimiento. Si el subprocedimiento devuelve un valor, se debe codificar una operacin RETURN dentro del subprocedimiento. Debe asegurarse de que se lleve a cabo una operacin RETURN antes de llegar al final del procedimiento. 5. Una especificacin de Fin de procedimiento (E en la posicin 24 de una especificacin de procedimiento) Excepto para una definicin de interfaz del procedimiento, que se puede ubicar el cualquier lugar de las especificaciones de definicin, un subprocedimiento se debe codificar en el orden indicado anteriormente. Para obtener ms informacin acerca de la estructura de la seccin de fuente principal y cmo afecta la ubicacin de definiciones al mbito, vea el apartado Ubicacin de definiciones y mbito en la pgina 228. Consulte el apartado Captulo 6. Subprocedimientos y prototipos en la pgina 59 para obtener informacin sobre subprocedimientos y prototipos.

Sentencia de especificacin de procedimiento


El diseo general para la especificacin del procedimiento es el siguiente: v El tipo de especificacin de procedimiento (P) se entra en la posicin 6 v la seccin no de comentario de la especificacin abarca de la posicin 7 a la posicin 80: Las entradas de formato fijo abarcan de la posicin 7 a la 24 Las entradas de palabra clave abarcan de la posicin 44 a la 80 v La seccin de comentarios de la especificacin abarca de la posicin 81 a la posicin 100.

Copyright IBM Corp. 1994, 2000

303

*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 PName+++++++++++..B...................Keywords+++++++++++++++++++++++++++++Comments++++++++++++

Figura 105. Diseo de especificacin de procedimiento

Lnea de continuacin de palabra clave de especificacin de procedimiento


Si se requiere espacio adicional para palabras clave, el campo de palabras clave se puede continuar en las lneas subsiguientes de este modo: v La posicin 6 de la lnea de continuacin debe contener una P 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 P.....................................Keywords+++++++++++++++++++++++++++++Comments++++++++++++

Figura 106. Diseo de lnea de continuacin de palabra clave de especificacin de procedimiento

Lnea de nombre continuada de especificacin de procedimiento


En la entrada de Nombre de la especificacin de Procedimiento se puede especificar un nombre de hasta 15 caracteres de longitud sin que requiera continuacin. Cualquier nombre (incluso alguno con 15 caracteres o menos) puede continuar en varias lneas si se codifican puntos suspensivos (...) al final del nombre parcial. Una definicin de nombre consta de los componentes siguientes: 1. Cero o ms lneas de nombre continuado. Las lneas de nombre continuadas se identifican al tener puntos suspensivos como ltimos caracteres no en blanco de la entrada. El nombre debe empezar dentro de las posiciones 7 - 21 y puede finalizar en cualquier lugar hasta la posicin 77 (finalizando los puntos suspensivos en la posicin 80). No puede haber espacios en blanco entre los caracteres del principio del nombre y los puntos suspensivos (...) . Si alguna de estas condiciones no es verdadera, la lnea se analiza como una lnea de definicin principal. 2. Una lnea de definicin principal que contenga el nombre, los atributos de definicin y las palabras clave. Si se codifica una lnea de nombre continuada, la entrada de nombre de la lnea de definicin principal se puede dejar en blanco. 3. Cero o ms lneas de continuacin de palabra clave.
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 10 DContinuedName+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Comments++++++++++++

Figura 107. Lnea de nombre continuada de especificacin de procedimiento

Posicin 6 (Tipo de formulario)


Entre una P en esta posicin para una especificacin de procedimiento

304

VisualAge RPG Consulta del lenguaje

Posiciones 7-21 (Nombre)


Entrada Explicacin Nombre El nombre del subprocedimiento a definir. Utilice las posiciones 7-21 para especificar el nombre del subprocedimiento que se est definiendo. Si el nombre tiene ms de 15 caracteres, se especifica un nombre en las posiciones 7 - 80 de las lneas de nombre continuadas. El nombre puede comenzar en cualquier posicin del espacio proporcionado. El nombre especificado debe ser el mismo que el nombre del prototipo que describe el procedimiento. Si la posicin 24 contiene una E, el nombre es opcional.

Posicin 24 (Inicio/fin de procedimiento)


Entrada Explicacin

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.

Posiciones 44-80 (Palabras clave)


Las posiciones 44 a 80 se proporcionan para las palabras clave de especificacin de procedimientos. nicamente una especificacin de Inicio de procedimiento (B en la posicin 24) puede tener entradas de palabra clave.

Palabras clave de especificacin de procedimiento


Las especificaciones de procedimiento actualmente permiten EXPORT.

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.

Captulo 22. Especificaciones de procedimiento

305

306

VisualAge RPG Consulta del lenguaje

Parte 4. Funciones incorporadas, Expresiones y Cdigos de operacin


En este apartado se describen las distintas maneras de manipular datos o dispositivos. Los temas principales incluyen: v El Captulo 23. Funciones incorporadas en la pgina 309 describe las funciones incorporadas y su utilizacin en las especificaciones de definicin y clculo. v El Captulo 24. Expresiones en la pgina 351 describe las expresiones y las reglas que rigen su utilizacin. v El Captulo 25. Cdigos de operacin en la pgina 367 ofrece una visin general de los cdigos de operacin agrupados por funciones. v El Los detalles de los cdigos de operacin en la pgina 392 describe detalladamente todos los cdigos de operacin. Las descripciones de cdigos de operacin estn agrupadas por orden alfabtico.

Copyright IBM Corp. 1994, 2000

307

308

VisualAge RPG Consulta del lenguaje

Captulo 23. Funciones incorporadas


Las funciones incorporadas se parecen a los cdigos de operacin, ya que tambin efectan operaciones en los datos que se especifican. Todas las funciones incorporadas tienen un smbolo de tanto por ciento (%) como primer carcter. La sintaxis de las funciones incorporadas es la siguiente:
nombre-funcin{(argumento{:argumento...})}

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))

Figura 108. Ejemplo de argumentos de funcin incorporada

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.

Copyright IBM Corp. 1994, 2000

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

Figura 109. Ejemplo de funcin incorporada

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))

Figura 110. Mantenimiento simplificado con funciones incorporadas

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

VisualAge RPG Consulta del lenguaje

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

%DEC %DECH %DECPOS %DIV %EDITC

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

valor con formato flotante

Captulo 23. Funciones incorporadas

311

Nombre de funcin incorporada %FOUND

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

%GRAPH %INT %INTH %LEN %NULLIND

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

%PADDR %REM %REPLACE

nombre de procedimiento dividendo: divisor

direccin de procedimiento el resto de la divisin de los dos argumentos

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

tamao de variable o literal

312

VisualAge RPG Consulta del lenguaje

Nombre de funcin incorporada %STATUS

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

%TRIML %TRIMR %UCS2 %UNS %UNSH %XFOOT

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

Funciones incorporadas (por orden alfabtico)


En los apartados siguientes se describen las funciones incorporadas.

%ABS (Valor absoluto de la expresin)


%ABS
Captulo 23. Funciones incorporadas

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.

Figura 111. %ABS

%ADDR (Obtener direccin de variable)


%ADDR(variable) %ADDR(variable(ndice)) %ADDR(variable(expresin))

%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

VisualAge RPG Consulta del lenguaje

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)

Figura 112. Ejemplo de %ADDR

Captulo 23. Funciones incorporadas

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(*))

Figura 113. Ejemplo de %ADDR

%CHAR (Convertir a datos de tipo carcter)


%CHAR(expresin)

%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

VisualAge RPG Consulta del lenguaje

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.'

Figura 114. Ejemplo de %CHAR

%DEC (Convertir a formato decimal empaquetado)


%DEC(expresin numrica{:precisin:posiciones decimales})

%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.

Captulo 23. Funciones incorporadas

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.

Figura 115. Ejemplo de %DEC y %DECH

%DECH (Convertir a formato decimal empaquetado con redondeo)


%DECH(expresin numrica:precisin:posiciones decimales)

%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.

Figura 116. Ejemplo de %DEC y %DECH

%DECPOS (Obtener el nmero de posiciones decimales)


%DECPOS(expresin numrica)

318

VisualAge RPG Consulta del lenguaje

%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.

Figura 117. Ejemplo de %DECPOS

%DIV (Devolver la porcin entera del cociente)


%DIV(n:m)

%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.

%EDITC (Editar valor utilizando un Editcode)


%EDITC(numrico : cdigo de edicin {: *ASTFILL | *CURSYM | smbolo de moneda})

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

Captulo 23. Funciones incorporadas

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'))

Figura 118. Ejemplo 1 de %EDITC

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

VisualAge RPG Consulta del lenguaje

Utilizando un %EDITC en un subprocedimiento, lo siguiente cumple estas reglas:


D D D D D C neg pos editparens val editedVal S S PR S EVAL 5P 2 5P 2 50A 30P 2 10A inz(-12.3) inz(54.32) value

editedVal = editparens(neg) '

C* Ahora, editedVal tiene el valor '(12.30) C EVAL

editedVal = editparens(pos) '

C* Ahora, editedVal tiene el valor ' 54.32

*--------------------------------------------------------------* 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

value inz(' ') inz(' ')

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

Figura 119. Ejemplo 2 de %EDITC

%EDITFLT (Convertir en representacin flotante externa)


%EDITFLT(expresin numrica)

%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

Captulo 23. Funciones incorporadas

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) + '.'

C* El valor de "string" es 'Float value is +1.000000000000000E+004. '

Figura 120. Ejemplo de %EDITFLT

%EDITW (Editar valor utilizando una Palabra de edicin)


%EDITW(numrico : palabra de edicin)

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)

Figura 121. Ejemplo de %EDITW

%ELEM (Obtener nmero de elementos)


%ELEM(nombre_tabla) %ELEM(nombre_matriz) %ELEM(nombre_estructura_datos_mltiples_apariciones)

%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

VisualAge RPG Consulta del lenguaje

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)

Figura 122. Ejemplo de %ELEM

%EOF (Devolver condicin de fin o principio de archivo)


%EOF{(archivo)}

%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.

Captulo 23. Funciones incorporadas

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

Figura 123. %EOF sin el parmetro de nombre de archivo


*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... FFilename++IT.A.FRlen+......A.Device+.Keywords+++++++++++++++++++++++++++++ F* Este programa compara dos archivos F* FFILE1 IF E DISK FFILE2 IF E DISK F CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* Ejecutar el bucle hasta que FILE1 o FILE2 llegen al C* final de archivo C DOU %EOF(FILE1) OR %EOF(FILE2) C* Leer un registro de cada archivo y comparar los C* registros C* C READ REC1 C READ REC2 C SELECT

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

Figura 124. %EOF con el parmetro de nombre de archivo

%EQUAL (Devolver condicin de coincidencia exacta)


%EQUAL{(archivo)}

324

VisualAge RPG Consulta del lenguaje

%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

Figura 125. Ejemplo de %EQUAL con SETLL

%ERROR (Devolver condicin de error)


%ERROR devuelve 1 si la operacin ms reciente con el ampliador E especificado ha dado como resultado una condicin de error. Es lo mismo que activar el indicador de error para la operacin. Antes de que comience una operacin con el ampliador E especificado, %ERROR se establece de manera que devuelva 0 y no sufre cambio alguno despus de la operacin si no se produce ningn error. Todas las operaciones que permiten un indicador de error pueden establecer tambin la funcin incorporada %ERROR. Si desea ver ejemplos de la funcin incorporada, consulte la Figura 144 en la pgina 340 y la Figura 145 en la pgina 341.

%FLOAT (Convertir en formato flotante)


%FLOAT(expresin numrica)

%FLOAT convierte el valor de la expresin numrica en formato flotante. Esta funcin incorporada nicamente se puede utilizar en expresiones.

Captulo 23. Funciones incorporadas

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.

Figura 126. Ejemplo de %FLOAT

%FOUND (Devolver condicin de encontrado)


%FOUND{(archivo)}

%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

VisualAge RPG Consulta del lenguaje

*...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

Figura 129. %FOUND utilizado para probar una operacin de serie

%GETATR (Recuperar atributo)


%GETATR(nombre_ventana:nombre_componente:nombre_atributo)

%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:

Captulo 23. Funciones incorporadas

327

CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....Comments++++++ CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++++Comments++++++ C EVAL ENT0000B = %GETATR('INVENTORY':'ENT0000B':'TEXT')

Figura 130. Ejemplo de %GETATR

2. La funcin incorporada %GETATR no soporta valores enteros con signo y sin signo de 1 y 8 bytes ni valores Unicode.

%GRAPH (Convertir a valor grfico)


%GRAPH(char-expr | graph-expr | UCS-2-expr { : ccsid })

%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

VisualAge RPG Consulta del lenguaje

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.

Figura 131. Ejemplos de %GRAPH

%INT (Convertir en formato de entero)


%INT(expresin numrica)

%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

Figura 132. Ejemplo de %INT e %INTH

Captulo 23. Funciones incorporadas

329

%INTH (Convertir en formato de entero con redondeo)


%INTH(expresin numrica)

%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

Figura 133. Ejemplo de %INT e %INTH

%LEN (Obtener o establecer longitud)


%LEN(expresin)

%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.

%LEN utilizado por su valor


Si se utiliza en la parte derecha de una expresin, esta funcin devuelve el nmero de dgitos o caracteres de la expresin variable. Para las expresiones numricas, el valor devuelto representa la precisin de la expresin y, no necesariamente, el nmero real de dgitos significativos. Para una expresin o variable flotante, el valor devuelto es 4 u 8. Cuando el parmetro es un literal numrico, la longitud devuelta es el nmero de dgitos del literal. Para expresiones de carcter, grficas o UCS-2, el valor devuelto es el nmero de caracteres del valor de la expresin. Para valores de longitud variable, como por ejemplo el valor devuelto por una funcin incorporada o un campo de longitud variable, el valor devuelto por %LEN es la longitud actual del valor de carcter, grfico o UCS-2. Se debe tener en cuenta que si el parmetro es una funcin incorporada o expresin con un valor calculable al llevar a cabo la compilacin, la longitud devuelta es el nmero real de dgitos del valor constante, en lugar del valor mximo posible que puede devolver la expresin.

330

VisualAge RPG Consulta del lenguaje

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

Figura 134. Ejemplo de %DECPOS y %LEN

%LEN utilizado para establecer la longitud de campos de longitud variable


Si se utiliza en la parte izquierda de una expresin, esta funcin establece la longitud actual de un campo de longitud variable. Si la longitud establecida es superior a la actual, los caracteres del campo comprendidos entre la longitud antigua y la nueva se establecen en espacios en blanco. Nota: Se puede utilizar %LEN en la parte izquierda de una expresin slo si el parmetro es de longitud variable.

Captulo 23. Funciones incorporadas

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)

Figura 135. Ejemplo de %LEN con campo de longitud variable

%NULLIND (Consultar o establecer indicador de nulo)


%NULLIND(nombre de campo)

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

VisualAge RPG Consulta del lenguaje

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

Figura 136. Ejemplo de %NULLIND

%OPEN (Devolver condicin de apertura de archivo)


%OPEN(archivo)

%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 ...

Figura 137. Ejemplo de %OPEN

%PADDR (Obtener direccin de procedimiento)


%PADDR(serie)

%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.

Captulo 23. Funciones incorporadas

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

Figura 138. Ejemplo de %PADDR

%REM (Devolver resto entero)


%REM(n:m)

%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

VisualAge RPG Consulta del lenguaje

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

Figura 139. Ejemplo de %DIV y %REM

%REPLACE (Sustituir serie de caracteres)


%REPLACE(serie de sustitucin: serie fuente{:posicin inicial :longitud de la serie fuente a sustituir})

%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.

Captulo 23. Funciones incorporadas

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*

Figura 140. Ejemplo de %REPLACE (Pieza 1 de 2)


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* C* C C 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'

Figura 140. Ejemplo de %REPLACE (Pieza 2 de 2)

336

VisualAge RPG Consulta del lenguaje

%SCAN (Explorar caracteres)


%SCAN(argumento de bsqueda : serie de origen {: inicio})

%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.

Figura 141. Ejemplo de %SCAN

%SETATR (Establecer atributo)


%SETATR(nombre_ventana:nombre_componente:nombre_atributo)

%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

CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....Comments++++++ CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++++Comments++++++ EVAL ENT0000B = *BLANKS EVAL %setatr('inventory':'ent0000b':'text') = ENT0000B

Figura 142. Ejemplo de %SETATR

%SIZE (Tamao de constante o campo)


%SIZE(variable) %SIZE(literal) %SIZE(matriz{:*ALL}) %SIZE(tabla{:*ALL}) %SIZE(estructura de datos de mltiples apariciones{:*ALL})

%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

VisualAge RPG Consulta del lenguaje

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

Figura 143. Ejemplo de %SIZE

%STATUS (Devolver estado de archivo o de programa)


%STATUS{(archivo)}

%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.

Captulo 23. Funciones incorporadas

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

Figura 144. %STATUS y %ERROR con el ampliador E

340

VisualAge RPG Consulta del lenguaje

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 ...

Figura 145. %STATUS y %ERROR con el ampliador E, indicador de error y *PSSR

%STR (Obtener o almacenar serie con terminacin de nulo)


%STR(puntero de base{: long.mx})(lado derecho) %STR(puntero de base : long.mx)(lado izquierdo)

%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.

Captulo 23. Funciones incorporadas

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> '.

Figura 146. Ejemplo 1 de %STR (lado derecho)

Lo siguiente es un ejemplo de %STR con el segundo parmetro especificado.


D String1 S * D Fld1 S 10A C EVAL Fld1 = '<' + %str(String1 : 2) + '>' C* Suponiendo que String1 seala a '123|' en donde '|' representa el C* carcter nulo, despus de EVAL, Fld1 = '<12> '. C* Puesto que longitud mxima de lectura de la operacin ha sido 2, C* no se han tenido en cuenta ni el '3' ni '|'.

Figura 147. Ejemplo 2 de %STR (lado derecho)

En este ejemplo, se ha encontrado el terminador de nulo dentro de la longitud mxima especificada.


D String1 S * D Fld1 S 10A C EVAL Fld1 = '<' + %str(String1 : 5) + '>' C* Suponiendo que String1 seala a '123|' en donde '|' representa el C* carcter nulo, despus de EVAL, Fld1 = '<123> '. C* Puesto que la longitud mxima de lectura de la operacin ha sido 5, C* se ha encontrado el terminador de nulo de la posicin 4, por lo que C* se han utilizado todos los datos hasta el terminador de nulo.

Figura 148. Ejemplo 3 de %STR (lado derecho)

%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

VisualAge RPG Consulta del lenguaje

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|'

Figura 149. Ejemplos de %STR (lado izquierdo)

%SUBST (Devolver una serie)


%SUBST(serie:inicio{:longitud})

%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.

Captulo 23. Funciones incorporadas

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.

%SUBST Utilizado para su valor


%SUBST devuelve una subserie de la serie especificada. Esta serie puede ser una expresin o un campo de caracteres, grficos o UCS-2. Se pueden utilizar matrices no indexadas como serie, inicio y longitud. La subserie comienza en la posicin inicial especificada de la serie y tiene la longitud indicada. Si la longitud no se especifica, la subserie contina hasta el final de la serie. Por ejemplo:
El valor de El valor de El valor de %subst('Adis amigo': 5+2) es 'amigo' %subst('Adis amigo':5+2:10-7) es 'ami' %subst('abcd' + 'efgh':4:3) es 'def'

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).

%SUBST Utilizado como resultado de una asignacin


Cuando se utiliza como resultado de una asignacin, esta funcin incorporada hace referencia a determinadas posiciones del argumento serie. No se pueden utilizar matrices no indexadas como inicio o como longitud. El resultado comienza en la posicin inicial especificada de la variable y tiene la longitud que se indica. Si no se especifica la longitud o sta hace referencia a caracteres situados despus del final de la serie, se utiliza el final de la serie. Cuando %SUBST se utiliza como el resultado de una asignacin, el primer parmetro debe hacer referencia a una ubicacin de almacenamiento. Es decir, el primer parmetro de la operacin %SUBST debe ser uno de los siguientes: v Campo v Estructura de datos v Subcampo de estructura de datos v Nombre de matriz v Elemento de matriz v Elemento de tabla Se permite utilizar expresiones vlidas como segundo y tercer parmetros de %SUBST si sta aparece como resultado de una asignacin con una operacin EVAL.

344

VisualAge RPG Consulta del lenguaje

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) = '****'

Figura 150. Ejemplo de %SUBST

%TRIM (Eliminar blancos iniciales y de cola)


%TRIM(serie)

%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)

Figura 151. Ejemplo de %TRIM

%TRIML (Eliminar blancos iniciales)


%TRIML(serie)

%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.

Captulo 23. Funciones incorporadas

345

CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C* C* LOCATION tendr el valor "Toronto, Ontario". C* C EVAL LOCATION = %TRIML(' Toronto, Ontario ')

Figura 152. Ejemplo de %TRIML

%TRIMR (Eliminar blancos de cola)


%TRIMR(serie)

%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)

Figura 153. Ejemplo de %TRIMR

%UCS2 (Convertir a valor UCS-2)


%UCS2(char-expr | graph-expr)

%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

VisualAge RPG Consulta del lenguaje

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.

Figura 154. Ejemplos de %UCS2

%UNS (Convertir en formato sin signo)


%UNS(expresin numrica)

%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.

Captulo 23. Funciones incorporadas

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

Figura 155. Ejemplo de %UNS y %UNSH

%UNSH (Convertir en formato sin signo con redondeo)


%UNSH(expresin numrica)

%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

Figura 156. Ejemplo de %UNS y %UNSH

%XFOOT (Sumar elementos de expresin de matriz)


%XFOOT(expresin de matriz)

%XFOOT realiza la suma de todos los elementos de la expresin de matriz numrica especificada.

348

VisualAge RPG Consulta del lenguaje

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.

Captulo 23. Funciones incorporadas

349

350

VisualAge RPG Consulta del lenguaje

Captulo 24. Expresiones


Las expresiones son un modo de expresar la lgica del programa utilizando sintaxis sin formato. Se pueden utilizar para escribir sentencias de programa de manera ms concisa que si se utilizan las sentencias de formato fijo. Las expresiones son simplemente grupos de operandos y operaciones, como las siguientes:
A + B * C SERIEA + SERIEC D = %ELEM(ARRAYNAME)

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:

Copyright IBM Corp. 1994, 2000

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')

Prioridad de las operaciones


Las reglas de prioridad indican el orden en que se efectan las operaciones de las expresiones. Las operaciones cuya prioridad es mayor se efectan antes que las operaciones de prioridad inferior. Puesto que los parntesis tiene la prioridad ms alta, en primer lugar se realizan las operaciones que estn entre parntesis.

352

VisualAge RPG Consulta del lenguaje

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

El ejemplo siguiente muestra cmo funciona la prioridad.


*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C* C* Las dos operaciones siguientes generan resultados distintos C* aunque el orden de los operandos y los operadores es C* el mismo. Si PRECIO = 100, DESCUENT = 10 y C* TIPO = 0,15, el resultado de la primera operacin EVAL C* ser IMP = 98,5. Puesto que la multiplicacin tiene prioridad C* sobre la resta, DESCUENT * TIPO es la primera operacin C* que se efecta. El resultado de la misma (1,5) se resta C* de PRECIO. C* C* La segunda operacin EVAL dara como resultado IMP = 13,50. C* Como los parntesis tienen la prioridad ms alta, en primer C* lugar se realiza la operacin entre parntesis y el resultado C* de la misma (90) se multiplica por TIPO. C* C EVAL IMP = PRECIO - DESCUENT * TIPO C EVAL IMP = (PRECIO - DESCUENT) * TIPO

Figura 157. Ejemplos de expresiones

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

Tabla 35. Operandos soportados para las operaciones binarias


Operador + (suma) (resta) * (multiplicacin) / (divisin) ** (exponencial) + (concatenacin) + (concatenacin) + (concatenacin) + (aadir desplazamiento desde el puntero) - (restar punteros) - (restar desplazamiento al puntero) Tipo de operando 1 Numrico Numrico Numrico Numrico Numrico Carcter Grfico UCS-2 Puntero de base Tipo de operando 2 Numrico Numrico Numrico Numrico Numrico Carcter Grfico UCS-2 Numrico Tipo de resultado Numrico Numrico Numrico Numrico Numrico Carcter Grfico UCS-2 Puntero de base

Puntero de base Puntero de base

Puntero de base Numrico

Numrico Puntero de base

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

VisualAge RPG Consulta del lenguaje

Tabla 36. Tipos soportados para las funciones incorporadas


Operacin %ABS %CHAR %DEC %DECH %DECPOS %DIV %EDITC Operandos Numrico Grfico, numrico, UCS-2, fecha, hora o indicacin de la hora Tipo de resultado Numrico Carcter

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

Captulo 24. Expresiones

355

Tabla 36. Tipos soportados para las funciones incorporadas (continuacin)


Operacin %SUBST %TRIM %TRIM %TRIM %TRIML %TRIML %TRIML %TRIMR %TRIMR %TRIMR %UCS2 %UNS %UNSH Operandos UCS-2 : numrico {: numrico} Carcter Grfico UCS-2 Carcter Grfico UCS-2 Carcter Grfico UCS-2 Carcter o grfico{:ccsid} Numrico Numrico Tipo de resultado UCS-2 Carcter Grfico UCS-2 Carcter Grfico UCS-2 Carcter Grfico UCS-2 Valor UCS-2 de longitud variable Numrico (sin signo) Numrico (sin signo)

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

Reglas de las expresiones


Las reglas generales siguientes se aplican a todas las expresiones: v Las expresiones se codifican en la entrada 2 del Factor ampliado de la Especificacin de clculo. v Una expresin se pueden continuar en ms de una especificacin. En una especificacin de continuacin, las nicas entradas permitidas son C en la columna 6 y la entrada Factor ampliado 2. No se necesita ningn carcter de continuacin especial, a menos que la expresin est dividida dentro de un literal o de un nombre. v Los espacios en blanco (como los parntesis) slo son necesarios para resolver ambigedades. No obstante, tambin se pueden utilizar para que los datos sean ms legibles. Tenga en cuenta que RPG leer tantos caracteres como le sea posible al analizar cada elemento de una expresin. Por ejemplo,
X**DAY es X elevado a la potencia de DAY X* *DAY es X multiplicado por *DAY

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

VisualAge RPG Consulta del lenguaje

En el ejemplo siguiente se muestra cmo se pueden utilizar las expresiones.


*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++ C* C* Las operaciones del grupo DOU se repetirn hasta que la C* expresin lgica se cumpla. Es decir, hasta que COUNTER sea C* menor que MAXITEMS o hasta que el indicador 03 est activado. C* C DOU COUNTER < MAXITEMS OR *IN03 C* C* Las operaciones controladas por la operacin IF se efectuarn si C* DUEDATE (que es una variable de fecha) corresponde a una fecha C* anterior al 31 de diciembre de 1994. C* C IF DUEDATE < D'12-31-94' C* C* En esta expresin numrica, a COUNTER se le asigna el valor de C* COUNTER ms 1. C* C EVAL COUNTER = COUNTER + 1 C* C* Esta expresin numrica utiliza una funcin incorporada para asignar C* el nmero de elementos de la matriz ARRAY a la variable C* ARRAYSIZE. C* C EVAL ARRAYSIZE = %ELEM(ARRAY) C* C* Esta expresin calcula el inters y redondea el resultado, C* que se coloca en la variable INTEREST. C* C EVAL (H) INTEREST = BALANCE * RATE C* C* Esta expresin de caracteres crea una sentencia a partir de un C* nombre y un nmero concatenndolos. Ya que no puede concatenarse C* datos numricos, debe utilizar %CHAR, %EDITC, %EDITW o %EDITFLT C* para convertirlos a datos de tipo carcter. C* No es necesario un carcter de continuacin para continuar la C* expresin. El signo + final de la primera lnea es un operador C* de concatenacin, no un carcter de continuacin. C* Esta sentencia produce 'Id number for John Smith is 231 364' C EVAL STRING = 'Id number for ' + C %TRIMR(First) + ' '+ %TRIMR(Last) C + ' is ' + %EDITW(IdNum : ' & ')

Figura 158. Ejemplos de expresiones

Formato de los resultados numricos intermedios


En las operaciones binarias que involucran campos numricos, el formato del resultado intermedio depende del formato de los operandos.

Para los operadores +, - y *:

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.

Para el operador **:


El resultado se representa en formato flotante.

Rendimiento y aritmtica de 8 bytes


Por omisin, el compilador realiza una aritmtica de 4 bytes. La aritmtica de 8 bytes slo se produce 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.

Reglas de precisin para operaciones numricas


A diferencia de los cdigos de operaciones de formato fijo, en los que se debe especificar siempre el resultado de cada operacin individual, RPG debe determinar el formato y la precisin del resultado de cada operacin de una expresin. Si el resultado de una operacin es formato flotante, entero o sin signo, la precisin es el tamao mximo para dicho formato. Las operaciones de entero y sin signo producen valores de 4 bytes y las operaciones flotantes producen valores de 8 bytes. Sin embargo, si la operacin tiene un formato binario, de decimal con zona o de decimal empaquetado, la precisin del resultado depende de las precisiones de los operandos. Es importante observar las reglas de precisin de las operaciones decimales, puesto que incluso una operacin relativamente sencilla puede tener un resultado inesperado. Por ejemplo, si los dos operandos de una multiplicacin son suficientemente grandes, el resultado de la multiplicacin tendr cero posiciones decimales. Si multiplica dos nmeros de 20 dgitos, necesitar un resultado de 40 dgitos para contener todos los resultados posibles de la multiplicacin. Sin embargo, puesto que RPG nicamente ofrece soporte para valores numricos de hasta 30 dgitos, el resultado se ajustar para 30 dgitos. En este caso, se eliminarn 10 dgitos decimales del resultado. Existen dos conjuntos de reglas de precisin que pueden utilizarse para controlar el tamao de los valores intermedios: 1. Las reglas por omisin proporcionan resultados intermedios con la mxima extensin posible para minimizar la posibilidad de desbordamiento numrico. Desgraciadamente, en casos determinados puede producir resultados con posiciones decimales cero si el resultado es demasiado grande. 2. La regla de precisin de Posiciones decimales de resultado funciona del mismo modo que la regla por omisin, excepto si la sentencia implica una asignacin a una variable numrica o una conversin a una precisin decimal

358

VisualAge RPG Consulta del lenguaje

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.

Utilizacin de la regla de precisin por omisin


Utilizando la regla de precisin por omisin, se calcula la precisin de un valor decimal intermedio en una expresin para minimizar la posibilidad de desbordamiento numrico. Sin embargo, si la expresin implica numerosas operaciones de nmeros decimales largos, los intermedios pueden finalizar con cero posiciones decimales. (Especialmente, si la expresin tiene dos o ms divisiones anidadas.) Quiz no sea lo que espera el programador, en particular en una asignacin. Al determinar la precisin de un valor decimal intermedio, se llevan a cabo dos pasos: 1. Se calcula la precisin deseada o natural del resultado. 2. Si la precisin natural tiene ms de 30 dgitos, se ajusta de modo que se adapte a 30 dgitos. Normalmente en primer lugar implica reducir el nmero de posiciones decimales y, a continuacin, si es necesario, reducir el nmero total de dgitos del intermedio. Este comportamiento es el tratamiento por omisin y se puede especificar para un mdulo completo (utilizando la palabra clave de especificacin de control EXPROPTS(*MAXDIGITS) o para expresiones individuales de formato libre (utilizando el ampliador de cdigo de operacin M).

Precisin de los resultados intermedios


La Tabla 37 describe con ms detalle las reglas de precisin por omisin.
Tabla 37. Precisin de los resultados intermedios
Operacin Precisin del resultado

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.

Captulo 24. Expresiones

359

Tabla 37. Precisin de los resultados intermedios (continuacin)


Operacin N1+N2 Precisin del resultado T=mn (mx (L1-D1, L2-D2)+1, 30) Dr=mn (mx (D1,D2), 30-t) Lr=t+Dr N1-N2 T=mn (mx (L1-D1, L2-D2)+1, 30) Dr=mn (mx (D1,D2), 30-t) Lr=t+Dr N1*N2 Lr=mn (L1+L2, 30) Dr=mn (D1+D2, 30-mn ((L1-D1)+(L2-D2), 30)) N1/N2 Lr=30 Dr=mx (30-((L1-D1)+D2), 0) N1**N2 Flotante doble

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)

Ejemplo de reglas de precisin por omisin


Este ejemplo muestra cmo funcionan las reglas de precisin por omisin.

360

VisualAge RPG Consulta del lenguaje

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 )

Figura 159. Precisin de los resultados intermedios

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

Evaluar (Resultado de 1 * FLD4) Normas:


Lr = = = Dr = = = = = mn(L1+L2,30) mn(30+9,30) 30 mn(D1+D2,30-mn((L1-D1)+(L2-D2),30)) mn(27+4,30-mn((30-27)+(9-4),30)) mn(31,30-mn(3+5,30) mn(31,30-8) 22

Evaluar (Resultado de 2 + FLD5) Normas:


T = = = = = Dr = = = = Lr = = mn(mx(L1-D1,L2-D2)+1,30) mn(mx(30-22,9-4)+1,30) mn(mx(8,5)+1,30) mn(9,30) 9 mn(mx(D1,D2),30-T) mn(mx(22,4),30-9) mn(22,21) 21 T + Dr 9 + 21 = 30

Evaluar FLD2/Resultado de 3 Normas:

Captulo 24. Expresiones

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.

Utilizacin de las Reglas de precisin de Posicin decimal de resultado


La regla de precisin de Posicin decimal de resultado significa que la precisin de un valor intermedio decimal se calcular de modo que el nmero de posiciones decimales nunca sea inferior al nmero de posiciones decimales del resultado de la asignacin. Se especifica mediante: 1. EXPROPTS(*RESDECPOS) en la especificacin de control. Utilcelo para especificar este comportamiento para un mdulo completo. 2. El ampliador de cdigo de operacin R especificado para una operacin de formato libre. Las reglas de Posicin decimal de resultado se aplican en las circunstancias siguientes: 1. Las reglas de Posicin decimal de resultado nicamente se aplican para los resultados intermedios decimales empaquetados. Este comportamiento no se aplica a los resultados intermedios de las operaciones que tienen resultados flotantes, sin signo o enteros. 2. Las reglas de precisin de Posicin decimal de resultado nicamente se aplican si existe una asignacin (tanto explcita como implcita) a un destino decimal (empaquetado, con zona o binario). Puede producirse en las situaciones siguientes: a. Para una sentencia EVAL, el nmero mnimo de posiciones decimales lo proporcionan las posiciones decimales del destino de la asignacin y se aplica a la expresin situada a la derecha de la asignacin. Si tambin se aplica redondeo a la sentencia, se aade un dgito adicional al nmero mnimo de posiciones decimales (siempre que el mnimo sea inferior a 30). b. Para una sentencia RETURN, el nmero mnimo de posiciones decimales lo proporcionan las posiciones decimales del valor de retorno definido en la especificacin PI para el procedimiento. Si tambin se aplica redondeo a la sentencia, se aade un dgito adicional al nmero mnimo de posiciones decimales (siempre que el mnimo sea inferior a 30). c. Para un parmetro VALUE o CONST, el nmero mnimo de posiciones decimales lo proporcionan las posiciones decimales del parmetro formal (especificado en el prototipo de procedimiento) y se aplica a la expresin especificada como el parmetro pasado. d. Para la funcin incorporada %DEC y %DECH con longitud explcita y posiciones decimales especificadas, el nmero mnimo de posiciones decimales lo proporciona el tercer parmetro de la funcin incorporada y se aplica a la expresin especificada como el primer parmetro. El nmero mnimo de posiciones decimales se aplica a la subexpresin completa, a menos que se haya alterado temporalmente mediante otra de las

362

VisualAge RPG Consulta del lenguaje

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.

Ejemplo de Reglas de precisin de Posicin decimal de resultado


Los ejemplos siguientes muestran las reglas de precisin de Posicin decimal de resultado:

Captulo 24. Expresiones

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)

Figura 160. Ejemplos de reglas de precisin

Evaluacin de circuito corto


Las operaciones relacionales AND y OR se evalan de izquierda a derecha. Sin embargo, en cuanto se conoce el valor, se detiene la evaluacin de la expresin y se devuelve el valor. Como resultado, no es necesario evaluar todos los operandos de la expresin. En el caso de la operacin AND, si el primer operando es falso, el segundo operando no se evala. Asimismo, para la operacin OR, si el primer operando es verdadero, el segundo operando no se evala. Existen dos implicaciones de este comportamiento. En primer lugar, un ndice de matriz se puede probar y utilizar dentro de la misma expresin. La expresin
I<=%ELEM(ARRAY) AND I>0 AND ARRAY(I)>10

nunca podr ser resultado de una excepcin de indexacin de matrices.

364

VisualAge RPG Consulta del lenguaje

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

Figura 161. Codificacin de ejemplo de una llamada con efectos laterales

Captulo 24. Expresiones

365

366

VisualAge RPG Consulta del lenguaje

Captulo 25. Cdigos de operacin


El lenguaje de programacin VisualAge RPG le permite realizar un gran nmero de operaciones distintas sobre los datos. Los cdigos de operacin, que se entran en las especificaciones de clculo, indican la operacin que se realizar. Generalmente son abreviaturas del nombre de la operacin. Los cdigos de operacin se dividen por funciones. La primera parte de esta seccin contiene informacin general acerca de estas categoras. La ltima parte describe cada cdigo de operacin, ordenados alfabticamente, y muestra uno o varios ejemplos de la mayor parte de operaciones.

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:

Copyright IBM Corp. 1994, 2000

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

Figura 162. Ejemplos de operaciones aritmticas

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

VisualAge RPG Consulta del lenguaje

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.

Consideraciones sobre el rendimiento


Las operaciones aritmticas se efectuarn a la mxima velocidad cuando todos los operandos tengan el formato de nmeros enteros o sin signo. La siguiente velocidad ms alta se produce cuando todos los operandos tengan el formato de empaquetado, porque de este modo no sern necesarias las conversiones a un formato comn.

Aritmtica de enteros y sin signo


Para todas las operaciones aritmticas (sin incluir las que forman parte de las expresiones), si el factor 1, el factor 2 y el campo del resultado estn definidos con
Captulo 25. Cdigos de operacin

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

VisualAge RPG Consulta del lenguaje

*...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

Figura 163. Resumen de las operaciones aritmticas

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.

Llamadas con prototipo


En una llamada con prototipo se puede llamar (con la misma sintaxis) a: v Programas que estn en el sistema en tiempo de ejecucin v Procedimientos exportados en otros mdulos que estn enlazados en el mismo programa v Subprocedimientos del mismo mdulo.

372

VisualAge RPG Consulta del lenguaje

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)

Figura 164. Ejemplo de la operacin CALLP

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.

Sintaxis de los nombres de los programas en una llamada


Los nombres de los programas se especifican en el factor 2 de una operacin CALL. Si se especifica el nombre de la biblioteca, debe seguirle una barra inclinada y, a continuacin, el nombre del programa (por ejemplo, LIB/PROG). Si no se especifica ninguna biblioteca, se utiliza la lista de bibliotecas para encontrar el programa. El valor *CURLIB no se soporta. Observe las reglas siguientes: v La longitud total de un literal, incluyendo la barra inclinada, no puede sobrepasar los 12 caracteres. v La longitud total de los datos que no son espacios en blanco en un campo o constante con nombre, incluyendo la barra inclinada, no puede sobrepasar los 21 caracteres.
Captulo 25. Cdigos de operacin

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

VisualAge RPG Consulta del lenguaje

*...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

Figura 165. Ejemplo de cmo agrupar las referencias a un programa

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.

Operaciones de rea de datos


Las operaciones de rea de datos son las siguientes: v IN (Recuperar un rea de datos) en la pgina 460 v OUT (Grabar un rea de datos) en la pgina 505

376

VisualAge RPG Consulta del lenguaje

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).

Adicin o resta de fechas


Cuando se aade (o resta) una duracin en meses a (o de) una fecha, la regla general es que se incrementa (o reduce) la parte de mes 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. Por ejemplo, si aadimos un mes a la fecha 95/05/30 (formato *YMD) obtenemos 95/06/30, como era de esperar. La parte de mes resultante se ha incrementado en 1; la parte de da no se ha modificado. Por otra parte, si aadimos un mes a 95/05/31, obtenemos 95/06/30. La parte de mes resultante se ha incrementado en 1 y la parte de da resultante se ha ajustado porque el mes de junio slo tiene 30 das. Si restamos un mes a 95/03/30, obtenemos 95/02/28. En este caso, la parte de mes resultante se reduce en 1 y la parte de da resultante se ajusta porque el mes de febrero slo tiene 28 das (en los aos no bisiestos). Los resultados son parecidos cuando se aade o resta 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.

Clculo de las duraciones entre fechas


Puede utilizarse la operacin SUBDUR para calcular una duracin restando dos fechas, horas o indicaciones de la hora. El resultado del clculo se expresa en unidades completas; el redondeo se realiza hacia abajo. El clculo de las duraciones incluye los microsegundos. Por ejemplo, si la duracin real es de 384 das, y se pide el resultado en aos, el resultado ser 1 ao completo porque hay 1,05 aos en 384 das. Una duracin de 59 minutos expresada en horas dar como resultado 0 horas.

378

VisualAge RPG Consulta del lenguaje

A continuacin se exponen algunos ejemplos adicionales.


Tabla 38. Duraciones resultantes mediante la operacin SUBDUR
Unidad de duracin Meses Factor 1 1999-03-28 1999-03-14 1999-03-15 Aos 1999-03-14 1999-03-15 1999-03-14-12.34.45.123456 Horas 1990-03-14-23.00.00.000000 Factor 2 1999-02-28 1998-03-15 1998-03-15 1998-03-15 1998-03-15 1998-03-14-12.34.45.123457 1990-03-14-22.00.00.000001 Resultado 1 mes 11 meses 12 meses 0 aos 1 ao 0 aos 0 horas

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'

Si se invierte la adicin, no se obtienen las dos fechas originales.

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 que utilizan expresiones


Las operaciones que utilizan expresiones son las siguientes: 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 WHEN (Seleccionar cuando sea verdadero) en la pgina 558 Se pueden utilizar expresiones en formato libre en el campo del factor 2 ampliado para todas estas expresiones.

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

VisualAge RPG Consulta del lenguaje

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

Subarchivo Texto esttico

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 establecimiento de indicador


Las operaciones de establecimiento de indicador son las siguientes: v SETOFF (Desactivar indicador) en la pgina 537 v SETON (Activar indicador) en la pgina 537 Las operaciones SETON y SETOFF activan o desactivan respectivamente los indicadores especificados en las posiciones 71 a 76. Se debe especificar un indicador resultante como mnimo en estas posiciones. Vea cada operacin para una explicacin de su funcin.

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).

Operaciones de gestin de memoria


Las operaciones de gestin de memoria asignan almacenamiento. Las operaciones de gestin de memoria son las siguientes: v ALLOC (Asignar almacenamiento) en la pgina 395 v DEALLOC (Liberar almacenamiento) en la pgina 426 v REALLOC (Reasignar almacenamiento con longitud nueva) en la pgina 521 La operacin ALLOC asigna el almacenamiento dinmico y establece el puntero del campo del resultado para que seale al almacenamiento. El almacenamiento no est inicializado.

382

VisualAge RPG Consulta del lenguaje

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.

Cmo mover datos de tipo carcter, grfico, UCS-2 y numrico


Cuando un campo de caracteres se mueve a un campo del resultado numrico, se convierte la parte de dgito de cada carcter al carcter numrico correspondiente y, a continuacin, se mueve al campo del resultado. Los espacios en blanco se transfieren como ceros. Para la operacin MOVE, la parte de zona del carcter situado ms a la derecha se convierte al signo correspondiente y se mueve a la posicin situada ms a la derecha del campo de resultado numrico. Ser el signo del campo. Para la operacin MOVEL, se convierte la parte de zona del carcter situado ms a la derecha del factor 2 y se utiliza como signo del campo del

384

VisualAge RPG Consulta del lenguaje

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.

Cmo mover los datos de fecha y hora


Los cdigos de operacin MOVE y MOVEL se pueden utilizar para trasladar campos de tipo de Fecha, Hora e Indicacin de la hora. Para los cdigos de operacin MOVE y MOVEL, se permiten las combinaciones siguientes: v Fecha a Fecha, Fecha a Indicacin de la Hora, Fecha a Caracteres o Numrico v Hora a Hora, Hora a Caracteres o Numrico, Hora a Indicacin de la Hora v Indicacin de la Hora a Indicacin de la Hora, Indicacin de la Hora a Fecha, Indicacin de la Hora a Hora, Indicacin de la Hora a Caracteres o Numrico v Caracteres o Numrico a Fecha, Caracteres o Numrico a Hora, Caracteres o Numrico a Indicacin de la Hora El factor 1 ha de estar en blanco si tanto el origen como el destino del movimiento son campos de fecha, hora o indicacin de la hora. Si el Factor 1 est en blanco, se utiliza el formato del campo Fecha, Hora o Indicacin de la hora. 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 o el destino de la operacin. Puede especificarse cualquier formato vlido. 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. Recuerde lo siguiente cuando especifique el factor 1: v No se permite el formato de hora *USA para el movimiento entre los campos de hora y los numricos. v En el factor 1 se permiten los formatos *LONGJUL, *CYMD, *CMDY y *CDMY. (Para obtener ms informacin, consulte el apartado Tabla 17 en la pgina 113.) v Un cero (0) especificado al final de un formato (por ejemplo *MDY0), indica que el campo de caracteres no contiene separadores. v Un formato de ao de dos dgitos ( *MDY, *DMY, *YMD y *JUL) slo puede representar fechas comprendidas entre 1940 y 2039. Un formato de fecha de 3 dgitos (*CYMD, *CMDY, *CDMY) slo puede representar fechas comprendidas entre 1900 y 2899. Se emitir un error si se solicita la conversin a un formato de ao de 2 3 dgitos para fechas no comprendidas en este intervalo. v Cuando se utilizan MOVE y MOVEL para mover valores numricos o de caracteres a o desde una indicacin de la hora, se supone que el valor numrico o de caracteres contiene una indicacin de la hora. El Factor 2 es obligatorio y debe ser un valor de caracteres, numrico, de fecha, hora o indicacin de la hora. El factor contiene el campo, la matriz, el elemento de matriz, el nombre de tabla, el literal o la constante con nombre a convertir.

386

VisualAge RPG Consulta del lenguaje

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.

Ejemplos de conversin de un campo de caracteres en un campo de fecha


La Figura 166 en la pgina 388 muestra algunos ejemplos de cmo definir y mover fechas con aos de 2 y 4 dgitos entre campos de fecha o entre campos de caracteres y fecha.

Captulo 25. Cdigos de operacin

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 *

Figura 166. Utilizacin de MOVE con campos de caracteres y fecha (Pieza 1 de 2)


* * * * * * * * * * * * * * * * *

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

Figura 166. Utilizacin de MOVE con campos de caracteres y fecha (Pieza 2 de 2)

388

VisualAge RPG Consulta del lenguaje

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 167. Fuente para un mandato que utilice un parmetro de fecha.


DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ *---------------------------------------------------------* Declarar un tipo de datos con el formato de fecha *ISO. *---------------------------------------------------------D ISO_DATE S D DATFMT(*ISO) CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. * C *ENTRY PLIST C PARM DateParm 7 *---------------------------------------------------------* El formato del parmetro DATE es CYYMMDD, por lo que se codifica * *CYMD0 en el factor 1. Se utiliza MOVE para convertir la fecha * de un valor de caracteres a una fecha *ISO. *---------------------------------------------------------C *CYMD0 MOVE DATEPARM ISO_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

Captulo 25. Cdigos de operacin

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.

Operaciones de programacin estructuradas


Las operaciones de programacin estructuradas son las siguientes: v ANDxx (Y) en la pgina 396 v DO (Hacer) en la pgina 433 v DOUxx (Hacer hasta) en la pgina 436 v DOWxx (Hacer mientras) en la pgina 439 v ELSE (En caso contrario) en la pgina 442 v ENDyy (Finalizar un grupo estructurado) en la pgina 443 v FOR (Para) en la pgina 453 v IF (Si) en la pgina 457 v IFxx (Si) en la pgina 458 v ITER (Iterar) en la pgina 461 v LEAVE (Abandonar un grupo DO/FOR) en la pgina 464 v ORxx (O) en la pgina 503 v OTHER (De lo contrario, seleccionar) en la pgina 504 v SELECT (Iniciar un grupo de seleccin) en la pgina 530 v WHEN (Seleccionar cuando sea verdadero) en la pgina 558 v WHENxx (Seleccionar cuando sea verdadero) en la pgina 559 Las normas para llevar a cabo la comparacin en los cdigos de operacin ANDxx, DOUxx, DOWxx, IFxx, ORxx y WHENxx son las mismas que las que se proporcionan en Operaciones de comparacin en la pgina 375. En las operaciones ANDxx, DOUxx, DOWxx, IFxx, ORxx y WHENxx, xx puede ser: xx GT LT EQ NE GE LE 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.

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

VisualAge RPG Consulta del lenguaje

SL Blancos

Fin de la operacin SELECT. Fin de cualquier operacin estructurada.

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.

Captulo 25. Cdigos de operacin

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.

Los detalles de los cdigos de operacin


En las siguientes secciones se describe detalladamente cada cdigo de operacin.

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

VisualAge RPG Consulta del lenguaje

*...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

Figura 169. Operacin ADD

ADDDUR (Aadir duracin)


Cdigo ADDDUR (E) Factor 1 Fecha/Hora Factor 2 Duracin:Cdigo de duracin Campo de resultado Indicadores ER _

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

'98/05/30' ADDDUR 1:*MONTH da como resultado '98/06/30'

La parte de mes resultante se ha incrementado en 1; la parte de da no se ha modificado.


'98/05/31' ADDDUR 1:*MONTH da como resultado '98/06/30'

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

VisualAge RPG Consulta del lenguaje

*...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

Figura 170. Operacin ADDDUR

ALLOC (Asignar almacenamiento)


Cdigo ALLOC (E) Factor 1 Factor 2 Longitud Campo de resultado Puntero _ Indicadores ER _

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.

Figura 171. Operacin ALLOC

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

VisualAge RPG Consulta del lenguaje

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

Figura 172. Operacin ANDxx


*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* En el ejemplo siguiente, el indicador 25 se activar slo si las C* dos primeras condiciones se cumplen o si se cumple la tercera C* condicin. C* C* Como expresin, se escribira: C* EVAL *IN25 = ((FIELDA > FIELDB) AND (FIELDA >= FIELDC)) OR (FIELDA < FIELDD) C* C* C FIELDA IFGT FIELDB C FIELDA ANDGE FIELDC C FIELDA ORLT FIELDD C SETON 25 C ELSE C SETOFF 25 C ENDIF

Figura 173. Ejemplo de la prioridad de AND/OR

BEGACT (Empezar subrutina de accin)


Cdigo BEGACT Factor 1 Nombre de componente Factor 2 Nombre de evento Campo de resultado Nombre de ventana Indicadores

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.

Nombres de la subrutina de accin mediante el factor 1 y el factor 2


Si el factor 1 contiene PSB0009, el factor 2 contiene MOUSEMOVE y el campo de resultado no contiene ninguna entrada, el nombre de subrutina de accin es PSB0009+MOUSEMOVE.
CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++++ C PSB0009 BEGACT MOUSEMOVE

Figura 174. Nombre de la subrutina de accin - Factor 1 y factor 2

Nombres de la subrutina de accin mediante el factor 1 y el campo del resultado


Si el factor 1 contiene PSB0002, el factor 2 no contiene ninguna entrada y el campo de resultado contiene INVENTORY, el nombre de la subrutina de accin es PSB0002++INVENTORY.
CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++++ C PSB0002 BEGACT INVENTORY

Figura 175. Nombre de la subrutina de accin - Factor 1 y campo del resultado

Nombres de la subrutina de accin mediante el factor 1, el factor 2 y el campo del resultado


Si el factor 1 contiene PSB0001, el factor 2 contiene PRESS y el campo de resultado contiene INVENTORY, el nombre de subrutina de accin es PSB0001+PRESS+INVENTORY.

398

VisualAge RPG Consulta del lenguaje

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

Nombres de la subrutina de accin mediante el factor 1


Si el factor 1 contiene SETCOLORS y ni el factor 2 ni el campo del resultado contienen entradas, el nombre de la subrutina de accin es SETCOLORS. Este nombre se utiliza para recuperar informacin sobre la(s) ventana(s), componente(s) y evento(s) enlazado(s) con la subrutina de accin SETCOLORS.
CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++++ C SETCOLORS BEGACT

Figura 177. Nombre de la accin de subrutina - Factor 1

Subrutinas de accin de nico enlace y de mltiples enlaces


Las subrutinas de accin que slo estn enlazadas a una combinacin de ventana/componente/evento se denominan subrutinas de accin de nico enlace. Las subrutinas de accin que estn enlazadas a ms de una combinacin de ventana/componente/evento se denominan subrutinas de accin de mltiples enlaces. Nota: Todas las subrutinas del 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 Tabla 39 en la pgina 398 ilustra las subrutinas de accin de nico enlace y de mltiples enlaces. Por ejemplo, los elementos 1, 3 y 7 son subrutinas de accin de nico enlace. Los elementos 2 y 4 y los elementos 5 y 6 son subrutinas de accin de mltiples enlaces. Utilice las siguientes directrices cuando trabaje con subrutinas de accin: v Los nombres duplicados de subrutinas de accin no estn permitidos. El programa no puede contener nombres duplicados de subrutinas de accin. Si el factor 1 es la nica entrada para la operacin BEGACT, no puede ser igual a ningn nombre de campo, a ningn nombre de subrutina de usuario ni al nombre de ninguna otra construccin del programa. v Las subrutinas de accin sin ningn evento asociado no se ejecutan nunca. Esto puede producirse si se elimina el enlace de accin utilizando el Diseador GUI. Se utiliza el Diseador GUI para crear subrutinas de accin y para enlazar las subrutinas de accin con al menos una combinacin ventana/componente/evento. Cuando se compila una subrutina de accin, el compilador hace referencia a los enlaces que se han creado utilizando el Diseador GUI. Se pueden utilizar los nombres de subrutinas de accin creados por el Diseador GUI o se pueden sustituir dichos nombres por otros. Para obtener ms informacin sobre cmo
Captulo 25. Cdigos de operacin

399

utilizar el Diseador GUI para crear y enlazar subrutinas de accin, consulte la publicacin Iniciacin a VisualAge RPG y CODE/400.

BEGSR (Empezar subrutina de usuario)


Cdigo BEGSR Factor 1 Nombre de subrutina Factor 2 Campo de resultado Indicadores

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

Figura 178. Operacin Empezar subrutina de usuario

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.

BITOFF (Desactivar los bits)


Cdigo BITOFF Factor 1 Factor 2 Nmeros de bit Campo de resultado Campo de caracteres Indicadores

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

VisualAge RPG Consulta del lenguaje

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.

BITON (Activar los bits)


Cdigo BITON Factor 1 Factor 2 Nmeros de bit Campo de resultado Campo de caracteres Indicadores

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

Captulo 25. Cdigos de operacin

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

BITON BITON BITON BITON BITON BITOFF BITOFF BITON

Figura 179. Operaciones BITON y BITOFF

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.

CABxx (Comparar y bifurcar)


Cdigo CABxx Factor 1 Comparando Factor 2 Comparando Campo de resultado Etiqueta Indicadores HI LO EQ

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

VisualAge RPG Consulta del lenguaje

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.

Captulo 25. Cdigos de operacin

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

Figura 180. Operaciones CABxx

CALL (Llamar a un programa AS/400)


Cdigo CALL (E) Factor 1 Factor 2 Nombre del programa Campo de resultado Nombre Plist Indicadores _ ER _

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

VisualAge RPG Consulta del lenguaje

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

Figura 181. Operacin CALL

Captulo 25. Cdigos de operacin

405

Llamada a un programa AS/400 que utiliza un archivo de estacin de trabajo


Para utilizar un programa VisualAge RPG que llama a un programa AS/400 que utiliza un archivo de estacin de trabajo, realice lo siguiente: v Especifique la palabra clave NOWAIT en la especificacin de definicin v Cuando cree el archivo de estacin de trabajo AS/400 en el servidor AS/400, especifique lo siguiente para el mandato CRTDSPF: Valor de dispositivo de pantalla: el nombre de la sesin en la que se ha de visualizar el archivo de pantalla. Nmero mximo de dispositivos: cualquier valor mayor que 1. v En el programa AS/400 remoto, no utilice la operacin ACQ para adquirir un dispositivo de pantalla. Se producira un conflicto que provocara un error. Nota: Al utilizar este mtodo, se pueden pasar parmetros al programa remoto. Sin embargo, el programa remoto no puede devolver ningn parmetro.

Llamada de programas de sistema principal que utilizan archivos de pantalla


Cuando el compilador VARPG llama a un programa de sistema principal AS/400 que utiliza archivos de pantalla, es necesario determinar el dispositivo de sesin vlido que puede utilizarse. Para determinar un dispositivo de sesin vlido que pueda utilizarlo el programa de sistema principal, puede utilizar un programa CL en el sistema principal AS/400 para ubicar una sesin vlida. El siguiente ejemplo ilustra tal programa CL. Asume que se est utilizando el protocolo SNA con uuna emulacin 5250 o Graphical Access ejecutndose en Client Access.

406

VisualAge RPG Consulta del lenguaje

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

Cmo llamar a los mandatos CL del AS/400


Si el programa VisualAge RPG llama a mandatos CL de AS/400:, v Especifique CALL para QCMDDDM si el mandato CL emite mandatos para archivos AS/400 v Especifique CALL para QCMDEXC si el mandato CL emite mandatos para programas AS/400 y/o reas de datos AS/400.

CALLB (Llamar a una funcin)


Cdigo CALLB (D E) Factor 1 Factor 2 Nombre de procedimiento o puntero de procedimiento Campo de resultado Nombre Plist Indicadores _ ER _

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.

CALLP (Llamar a un procedimiento o programa con prototipo)


Cdigo CALLP (M/R) Factor 1 Factor 2 NAME{ (Parm1 {:Parm2...}) }

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

VisualAge RPG Consulta del lenguaje

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

Figura 182. Operacin CALLP

CASxx (Invocar subrutina condicionalmente)


Cdigo CASxx Factor 1 Comparando Factor 2 Comparando Campo de resultado Nombre de subrutina Indicadores HI LO EQ

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

VisualAge RPG Consulta del lenguaje

*...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

Figura 183. Operaciones CASxx

CAT (Concatenar dos series)


Cdigo CAT (P) Factor 1 Serie de origen 1 Factor 2 Serie de origen 2: nmero de blancos Campo de resultado Serie de destino Indicadores

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

VisualAge RPG Consulta del lenguaje

*...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

Figura 184. Operaciones CAT


*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... * * El siguiente ejemplo muestra la utilizacin de series grficas * DName+++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++++++++ * El valor de Graffld es 'AACCBBGG'. * El valor de Graffld2 tras CAT 'aa AACCBBGG ' * El valor de Graffld3 tras CAT 'AABBCCDDEEFFGGHHAACC' * D Graffld 4G INZ(G'AACCBBGG') D Graffld2 10G INZ D Graffld3 10G INZ(G'AABBCCDDEEFFGGHH') CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq. * El valor 2 representa 2 blancos grficos como separadores C G'aa' cat Graffld:2 Graffld2 C cat Graffld Graffld3

Figura 185. Operacin CAT con datos grficos

Captulo 25. Cdigos de operacin

413

CHAIN (Recuperacin aleatoria desde un archivo)


Cdigo CHAIN (E N) Factor 1 Argumento de bsqueda Factor 2 Campo de resultado Indicadores NR ER _

Nombre de Estructura de datos componente Subarchivo, Archivo o Formato de registro

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.

Recuperacin de los datos desde un archivo o formato de registro


El archivo debe especificarse en las especificaciones de descripcin de archivo. Puede ser un archivo remoto AS/400 o un archivo local. Factor 1, el argumento de bsqueda, debe contener la clave, el nmero relativo de registro o el nombre KLIST utilizado para recuperar el registro: v Si el acceso es por clave, el factor 2 debe ser un archivo remoto AS/400. El factor 1 puede ser un nombre de campo, una constante con nombre, una constante figurativa o un literal. Si el archivo est descrito externamente, el factor 1 puede ser un nombre de KLIST. v Si el acceso se efecta por nmero relativo de registro, el factor 1 debe contener un literal entero o un campo numrico 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 especifica el nombre de archivo o nombre de formato de registro que se ha de leer: v Si el factor 2 es un nombre de archivo, se recupera el primer registro que coincida con el argumento de bsqueda. v Si el factor 2 es un nombre de archivo AS/400 y se especifica *MBR ALL, slo se procesa el miembro de archivo abierto actual. v Si el factor 2 es un archivo de disco local, debe estar descrito por un programa. v Si el factor 2 es un nombre de formato de registro, el archivo puede estar descrito externamente. v Si el factor 2 es un nombre de formato de registro y el acceso es por clave, se recupera el primer registro del tipo de registro especificado cuya clave coincida con el argumento de bsqueda. Nota: Se da soporte al bloqueo de registros para archivos remotos AS/400. No se da soporte al bloqueo de registros para archivos locales. Puede especificar un nombre de estructura de datos en el campo de resultado solamente si el archivo especificado en el factor 2 es un archivo descrito por programa (identificado por una F en la posicin 22 de la especificacin de descripcin de archivo). Cuando especifica un nombre de estructura de datos en el campo de resultado, la operacin CHAIN recupera el primer registro cuyo identificador de registro coincide con el argumento de bsqueda en el factor 1 y lo

414

VisualAge RPG Consulta del lenguaje

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.

Captulo 25. Cdigos de operacin

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 186. Operacin CHAIN con un nombre de archivo en el factor 2


*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* La operacin CHAIN utiliza el valor del argumento de bsqueda C* KEY para recuperar un registro del tipo REC1 de un archivo C* descrito externamente. Si no se encuentra ningn registro del tipo C* especificado con una clave igual al argumento de bsqueda, C* se activa el indicador 72. Se utiliza una clave compleja con una KLIST C* para recuperar registros de archivos que tienen una clave compuesta. C* Si se encuentra un registro del tipo especificado cuyo campo de clave C* es igual al argumento de bsqueda, el indicador 72 se desactiva y, C* por lo tanto, la operacin UPDATE se procesa. C* C KEY CHAIN REC1 72 C KEY KLIST C KFLD Field1 C KFLD Field2 C IF NOT *IN72 C* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* La operacin UPDATE modifica todos los campos del registro REC1. C* C UPDATE REC1 C ENDIF C* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* El ejemplo siguiente muestra una operacin CHAIN sin bloqueo. C* C MOVE 3 Rec_No C Rec_No CHAIN (N) INPUT 99

Figura 187. Operacin CHAIN con un nombre de formato de registro y sin bloqueo

Recuperacin de un registro desde un componente de subarchivo


Si el factor 2 es un componente de subarchivo, el factor 1 debe ser un ndice. La operacin CHAIN lee un registro del subarchivo utilizando el ndice.

416

VisualAge RPG Consulta del lenguaje

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.

CHECK (Comprobar caracteres)


Cdigo CHECK (E) Factor 1 Serie del comparador Factor 2 Serie base:inicio Campo de resultado Posicin a la izquierda Indicadores _ ER FD

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).

Captulo 25. Cdigos de operacin

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... . . .

Figura 188. Operacin CHECK (Pieza 1 de 2)

418

VisualAge RPG Consulta del lenguaje

. . . 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

Figura 188. Operacin CHECK (Pieza 2 de 2)


*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D * El siguiente ejemplo comprueba la existencia de caracteres * grficos en un campo DBCS empezando en la posicin grfica * 2 del campo. D * El valor de Graffld es 'DDBBCCDD'. * El valor de num tras CHECK es 4, ya que ste es el primer * carcter 'DD' no contenido en la serie. D D Graffld 4G INZ(G'DDBBCCDD') D Num 5 0 D CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq. C C C G'AABBCC' check Graffld:2 Num

Figura 189. Operacin CHECK con datos grficos

CHECKR (Comprobacin inversa)


Cdigo CHECKR (E) Factor 1 Serie del comparador Factor 2 Serie base:inicio Campo de resultado Posicin a la derecha Indicadores _ ER FD

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

VisualAge RPG Consulta del lenguaje

*...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*

Figura 190. Operacin CHECKR (Pieza 1 de 2)


CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C C MOVE '$2000.' Salary 6 C Digits CHECKR Salary:5 N 90 C . . . *...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... D* D* El ejemplo siguiente comprueba que FIELD contiene slo las letras D* A a J. Como resultado, ARRAY=(876310) tras la operacin CHECKR. D* El indicador 90 se activa. D DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D Array S 1 DIM(6) D Letter C 'ABCDEFGHIJ' D CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C C MOVE '1A=BC***' Field 8 C Letter CHECKR Field Array 90 C

Figura 190. Operacin CHECKR (Pieza 2 de 2)

Captulo 25. Cdigos de operacin

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

Cmo borrar elementos, estructuras o variables


Las estructuras se pueden borrar globalmente o elemento por elemento: v Si el campo de resultado contiene un nombre de formato de registro DISK se puede especificar *NOKEY en el factor 1 para borrar todos los campos excepto los campos de clave. v Si el campo del resultado contiene una estructura de datos de mltiples apariciones, un nombre de formato de registro o un nombre de tabla, se puede especificar *ALL en el factor 2 para borrar todas las apariciones, todos los campos del formato de registro o todos los elementos de la tabla. El nivel de aparicin se establece en 1. v Si el campo de resultado contiene un formato de registro y no se especifica *ALL en el factor 2, slo se borran los campos de salida del formato de registro. v Si el campo de resultado contiene un formato de registro o una estructura de datos, se borran todos los campos en el orden en el cual estn definidos en la estructura. v Si el campo de resultado contiene una estructura de datos de mltiples apariciones, slo se borran los campos de la aparicin actual. v Si el campo de resultado es una tabla, se borra el elemento actual de la tabla. v Si el campo de resultado es una matriz, se borra toda la matriz. v Si el campo de resultado es un elemento de matriz o un indicador con un ndice, slo se borra el elemento especificado.

422

VisualAge RPG Consulta del lenguaje

*...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

Figura 191. Operacin CLEAR para estructuras de datos

Cmo borrar campos de entrada de una ventana


Si el campo de resultado contiene un nombre de ventana, el factor 1 y el factor 2 deben estar en blanco. La ventana debe contener campos de entrada. Se borran todos los campos de entrada de la ventana y se establecen en sus valores por omisin: v Los campos numricos se borran con ceros v Los campos de caracteres se borran con blancos. Los campos del programa correspondiente tambin se establecen en cero o en espacios en blanco, segn su tipo. Por ejemplo, si la ventana INVENTORY contiene el campo de entrada de caracteres ENT0000B y el campo de entrada numrico ENT0000C, la operacin CLEAR realiza lo equivalente a lo siguiente:
CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++++ EVAL ENT0000B = *BLANKS EVAL ENT0000C = *ZERO EVAL %setatr('inventory':'ent0000b':'text') = ENT0000B EVAL %setatr('inventory':'ent0000c':'text') = ent0000c

Figura 192. Cmo borrar ventanas

Cmo borrar subarchivos


Si el campo de resultado contiene un nombre de subarchivo, el factor 1 y el factor 2 deben estar en blanco. Se borran todas las entradas del subarchivo y su atributo Cuenta se establece en cero.

Captulo 25. Cdigos de operacin

423

CLOSE (Cerrar archivos)


Cdigo CLOSE (E) Factor 1 Factor 2 Nombre de archivo o bien *ALL Campo de resultado Indicadores _ ER _

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

Figura 193. Operacin CLOSE

CLSWIN (Cerrar ventana)


Cdigo CLSWIN (E) Factor 1 Factor 2 Nombre de ventana Campo de resultado Indicadores _ ER _

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

VisualAge RPG Consulta del lenguaje

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'

Figura 194. Operacin CLSWIN

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.

Captulo 25. Cdigos de operacin

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

Figura 195. Operacin COMP

DEALLOC (Liberar almacenamiento)


Cdigo DEALLOC (E/N) Factor 1 Factor 2 Campo de resultado Puntero _ Indicadores ER _

426

VisualAge RPG Consulta del lenguaje

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.

Captulo 25. Cdigos de operacin

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

Figura 196. Operacin DEALLOC

DEFINE (Definicin de campo)


Cdigo DEFINE DEFINE Factor 1 *LIKE *DTAARA Factor 2 Campo al que se hace referencia rea de datos externos Campo de resultado Campo definido Campo interno Indicadores

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.

Definicin de un campo basndose en otro campo


El factor 1 debe contener *LIKE. El factor 2 debe contener el nombre del campo al que se hace referencia. Este campo puede estar descrito por un programa o externamente. Los atributos del campo especificado en el factor 2 se utilizan para el campo que se est definiendo en el campo de resultado. Este campo puede estar descrito por un programa o externamente. El factor 2 no puede ser un literal ni una constante con nombre. Si el factor 2 es una matriz, un elemento de matriz, una estructura de datos o un nombre de tabla, se utilizan los atributos de un elemento de la matriz o tabla para definir el campo.

428

VisualAge RPG Consulta del lenguaje

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.

Definicin de un campo como un rea de datos


El factor 1 debe contener *DTAARA. Si se especifica el factor 2, debe contener el rea de datos de AS/400 a la que se hace referencia. Si no se especifica el factor 2, se utiliza el campo de resultado como nombre del rea de datos. El nombre del rea de datos puede ser un nombre de 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. El campo de resultado debe contener un campo, una estructura de datos, un subcampo de estructura de datos o una estructura de datos de rea de datos. Es el mismo nombre que el que se utiliza en las operaciones IN y OUT para recuperar datos o grabar datos en el rea de datos especificada en el factor 2. Cuando se especifica una estructura de datos de rea de datos en el campo del resultado, la aplicacin VisualAge RPG recupera los datos desde el rea de datos en el momento de arrancar el programa y graba los datos en el rea de datos al finalizar el programa. El campo de resultado no puede contener lo siguiente: v El nombre de una estructura de datos de estado de programa ni el nombre de un subcampo de una estructura de datos de estado de programa v Una estructura de datos de informacin de archivo ni el nombre de un subcampo de una estructura de datos de informacin de archivo v El nombre de un subcampo de una estructura de datos de rea de datos

Captulo 25. Cdigos de operacin

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

VisualAge RPG Consulta del lenguaje

*...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

Figura 197. Operacin DEFINE

DELETE (Suprimir registro)


Cdigo Factor 1 Factor 2 Nombre de formato de registro, nombre de subarchivo o archivo Campo de resultado Indicadores NR ER _

DELETE (E) Argumento de bsqueda, ndice de subarchivo

La operacin DELETE suprime un registro. Cuando se ha suprimido un registro, no puede volverse a recuperar.

Captulo 25. Cdigos de operacin

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

VisualAge RPG Consulta del lenguaje

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.

Captulo 25. Cdigos de operacin

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

VisualAge RPG Consulta del lenguaje

*...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

Figura 198. Operacin DO

DOU (Hacer hasta)


Cdigo DOU (M/R) Factor 1 Factor ampliado 2 Expresin

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.

Captulo 25. Cdigos de operacin

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*

Figura 199. Ejemplo de la operacin DOU

DOUxx (Hacer hasta)


Cdigo DOUxx Factor 1 Comparando Factor 2 Comparando Campo de resultado Indicadores

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

VisualAge RPG Consulta del lenguaje

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.

Captulo 25. Cdigos de operacin

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

Figura 200. Operaciones DOUxx

DOW (Hacer mientras)


Cdigo DOW (M/R) Factor 1 Factor ampliado 2 Expresin

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

VisualAge RPG Consulta del lenguaje

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

Figura 201. Ejemplo de la operacin DOW

DOWxx (Hacer mientras)


Cdigo DOWxx Factor 1 Comparando Factor 2 Comparando Campo de resultado Indicadores

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

Captulo 25. Cdigos de operacin

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

Figura 202. Operaciones DOWxx

440

VisualAge RPG Consulta del lenguaje

DSPLY (Visualizar ventana de mensaje)


Cdigo DSPLY (E) Factor 1 Mensaje Factor 2 Nombre de especificacin de definicin Campo de resultado Campo numrico Indicadores _ ER _

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

Figura 203. Operacin DSPLY

ELSE (En caso contrario)


Cdigo ELSE Factor 1 Factor 2 Campo de resultado Indicadores

442

VisualAge RPG Consulta del lenguaje

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.

ENDyy (Finalizar un grupo estructurado)


Cdigo END ENDCS ENDDO ENDFOR ENDIF ENDSL Valor de incremento Factor 1 Factor 2 Valor de incremento Campo de resultado Indicadores

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.

Captulo 25. Cdigos de operacin

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

ENDACT (Fin de subrutina de accin)


Cdigo ENDACT Factor 1 Factor 2 Punto de retorno Campo de resultado Indicadores

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

VisualAge RPG Consulta del lenguaje

*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq... C Extended-factor2++++++++++++++++++++++++++++ C* C ENDACT '*DEFAULT'

Figura 204. Operacin ENDACT

ENDSR (Fin de subrutina de usuario)


Cdigo ENDSR Factor 1 Etiqueta Factor 2 Punto de retorno Campo de resultado Indicadores

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

No se permiten los indicadores de condicionamiento.


*...1....+....2....+....3....+....4....+....5....+....6....+....7... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq... C Extended-factor2++++++++++++++++++++++++++++ C* C Label BEGSR C . C . C . C ENDSR '*ENDCOMP'

Figura 205. Operacin ENDSR

EVAL (Evaluar expresin)


Cdigo EVAL (H/M/R) Factor 1 Factor ampliado 2 Sentencia de asignacin

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

VisualAge RPG Consulta del lenguaje

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)

Figura 206. Operaciones EVAL

EVALR (Evaluar expresin, ajuste por la derecha)


Cdigo EVALR (M/R) Factor 1 Factor ampliado 2 Sentencia de asignacin

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'

Figura 207. Operaciones EVALR

EXCEPT (Salida en tiempo de clculo)


Cdigo EXCEPT Factor 1 Factor 2 nombre EXCEPT Campo de resultado Indicadores

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

VisualAge RPG Consulta del lenguaje

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

Figura 208. Operaciones EXCEPT

EXSR (Invocar subrutina de usuario)


Cdigo EXSR Factor 1 Factor ampliado 2 Nombre de subrutina de usuario

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.

Captulo 25. Cdigos de operacin

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.

Codificacin de subrutinas de usuario


Una subrutina de usuario puede procesarse desde cualquier punto de las operaciones de clculo. Pueden procesarse todas las operaciones dentro de una subrutina de usuario, y pueden condicionarse estas operaciones mediante cualquier indicador vlido en las posiciones comprendidas entre 9 y 11. En las posiciones 7 y 8 pueden aparecer SR o blancos. Pueden indicarse lneas AND/OR de la subrutina de usuario en las posiciones 7 y 8. Los campos utilizados en una subrutina de usuario pueden definirse en la misma subrutina de usuario o en otra parte del programa. En cualquier caso, los campos pueden utilizarse tanto por el programa como por la subrutina de usuario. Una subrutina de usuario no puede contener otra subrutina de usuario. Una subrutina de usuario puede llamar a otra subrutina de usuario; esto es, una subrutina puede contener una operacin EXSR o CASxx. Sin embargo, una operacin EXSR o CASxx en una subrutina de usuario no puede llamarse a s misma directamente. No deben efectuarse llamadas indirectas a s misma a travs de otra subrutina, porque se producen resultados imprevisibles. Utilice los cdigos de operacin GOTO y TAG si desea bifurcar a otro punto de la misma subrutina. No es necesario especificar las subrutinas por el mismo orden en que se van a utilizar. Cada subrutina debe tener un nombre simblico exclusivo y debe contener una operacin BEGSR y una operacin ENDSR. Se permite la utilizacin de la operacin GOTO en una subrutina. GOTO puede especificar la etiqueta de la operacin ENDSR asociada a esa subrutina; no puede especificar el nombre de una operacin BEGSR. No puede emitirse GOTO a un TAG o ENDSR en una subrutina a menos que GOTO est en la misma subrutina que TAG o ENDSR. Puede utiliza la operacin LEAVESR para salir de una subrutina desde cualquier punto de su interior. El control pasa a la operacin ENDSR de la subrutina. Utilice LEAVESR slo en el interior de una subrutina.

450

VisualAge RPG Consulta del lenguaje

*...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

Captulo 25. Cdigos de operacin

451

EXTRCT (Extraer fecha/hora/indicacin de la hora)


Cdigo EXTRCT (E) Factor 1 Factor 2 Fecha/Hora:Cdigo de duracin Campo de resultado Destino Indicadores _ ER _

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

Figura 211. Operaciones EXTRCT

452

VisualAge RPG Consulta del lenguaje

FEOD (Forzar fin de datos)


Cdigo FEOD (E) Factor 1 Factor 2 Nombre de archivo Campo de resultado Indicadores _ ER _

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,

Captulo 25. Cdigos de operacin

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

VisualAge RPG Consulta del lenguaje

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

Figura 212. Ejemplos de la operacin FOR

GETATR (Recuperar atributo)


Cdigo GETATR (E) Factor 1 nombre de componente Factor 2 atributo Campo de resultado nombre de campo Indicadores _ ER _

Captulo 25. Cdigos de operacin

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

Figura 213. Operacin GETATR

456

VisualAge RPG Consulta del lenguaje

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

Figura 214. Operaciones GOTO y 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

Captulo 25. Cdigos de operacin

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*

Figura 215. Operaciones IF

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

VisualAge RPG Consulta del lenguaje

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

Figura 216. Operaciones IFxx/ENDIF e IFxx/ELSE/ENDIF

Captulo 25. Cdigos de operacin

459

IN (Recuperar un rea de datos)


Cdigo IN (E) Factor 1 *LOCK Factor 2 Nombre de rea de datos Campo de resultado Indicadores _ ER _

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

Figura 217. Operaciones IN y OUT

460

VisualAge RPG Consulta del lenguaje

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 :

Figura 218. Operacin ITER (Pieza 1 de 2)

Captulo 25. Cdigos de operacin

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 :

Figura 218. Operacin ITER (Pieza 2 de 2)

KFLD (Definir partes de una clave)


Cdigo KFLD Factor 1 Factor 2 Campo de resultado Campo de clave Indicadores

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

VisualAge RPG Consulta del lenguaje

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.

KLIST (Definir una clave compuesta)


Cdigo KLIST Factor 1 Nombre KLIST Factor 2 Campo de resultado Indicadores

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.

Captulo 25. Cdigos de operacin

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#

Figura 219. Operaciones KLIST y KFLD

LEAVE (Abandonar un grupo DO/FOR)


Cdigo LEAVE Factor 1 Factor 2 Campo de resultado Indicadores

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

VisualAge RPG Consulta del lenguaje

*...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 :

Figura 220. Operacin LEAVE

LEAVESR (Abandonar una subrutina)


Cdigo LEAVESR Factor 1 Factor 2 Campo de resultado Indicadores

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).

Captulo 25. Cdigos de operacin

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

Figura 221. Operaciones de LEAVESR

LOOKUP (Buscar un elemento en tabla o matriz)


Cdigo LOOKUP (matriz) (tabla) Argumento de bsqueda Argumento de bsqueda Nombre de matriz Nombre de tabla Nombre de tabla HI HI LO LO EQ EQ Factor 1 Factor 2 Campo de resultado Indicadores

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

VisualAge RPG Consulta del lenguaje

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.

Captulo 25. Cdigos de operacin

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

Figura 222. Operacin LOOKUP con matrices

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

VisualAge RPG Consulta del lenguaje

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.

Captulo 25. Cdigos de operacin

469

Ejemplos de MOVE (Parte 1)


Factor 2 ms corto que el campo de resultado
Factor 2 Campo de resultado

a.

Carcter a carcter Carcter a numrico Numrico a numrico Numrico a carcter

P H4 SN P H4 SN GX 4 B t GX 4 B t 1 2 7 8 4 2 5

Antes de MOVE Despus de MOVE Antes de MOVE Despus de MOVE

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

Despus de MOVE Antes de MOVE Despus de MOVE


A C F G PH 4 S N A C 1 2 7 8 4 2 5

d.

Factor 2 ms largo que el campo de resultado Factor 2 a.


A C E G PH 4 S N

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

Carcter a carcter Carcter a numrico Numrico a numrico

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

Antes de MOVE Despus de MOVE

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

Antes de MOVE Despus de MOVE

P H4 SN 7 8 4 2 5

Figura 223. Operacin MOVE (Pieza 1 de 2)

470

VisualAge RPG Consulta del lenguaje

Factor 2 ms corto que el campo de resultado Con P en el campo ampliador de operacin


Factor 2 Campo de resultado

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

Antes de MOVE Despus de MOVE

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

b. Carcter a numrico c. Numrico a numrico d. Numrico a carcter

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

Campo de resultado Antes de MOVE Despus de MOVE


5 6 7 8 4 P H4 SN

b.

GX 4 Bt G X 4 B t

Antes de MOVE Despus de MOVE Antes de MOVE Despus de MOVE

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

Antes de MOVE Despus de MOVE

A L T 5 F 7 8 4 2 u

y 5 = letra u.

Figura 223. Operacin MOVE (Pieza 2 de 2)

Captulo 25. Cdigos de operacin

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

Figura 224. Operacin MOVE con fecha

472

VisualAge RPG Consulta del lenguaje

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

DATE_USA contendr 12-31-9999 MOVE *HIVAL DATE_USA

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

Figura 225. Operacin MOVE con fecha (continuada)


*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... H* Especificar formato por omisin para campos de fecha H DATEFMT(*ISO) H* DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++ D date_USA S D DATFMT(*USA) D datefield S D D timefield S T INZ(T'14.23.10') D chr_dateA S 6 INZ('041596') D chr_dateB S 7 INZ('0610807') D chr_time S 6 CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. C* Mover un valor de caracteres que representa una fecha *MDY C* a un valor D(Date). C* *MDY0 indica que la fecha de caracteres en el factor 2 no C* contiene separadores. C* datefld contendr 1996-04-15 despus del movimiento. C *MDY MOVE chr_dateA datefld C* Mover un campo que contiene un valor T(Time) a un valor de caracteres C* en el formato *EUR. *EUR0 indica que el campo de resultado no debe C* contener separadores. C* chr_time contendr '142310' despus del movimiento. C *EUR0 MOVE timefld chr_time C* C* Mover un valor de caracteres que representa una C* fecha *CYMD a una fecha *USA C* Date_USA contendr 08/07/1961 despus de la operacin mover. C* 0 en *CYMD indica que el valor de caracteres no C* contiene separadores. C* C *CYMD0 MOVE chr_dateB date_USA

Figura 226. Operacin MOVE con fecha y hora sin separadores

Captulo 25. Cdigos de operacin

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

Figura 227. Operacin MOVE con indicacin de la hora

474

VisualAge RPG Consulta del lenguaje

*...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 228. MOVE entre campos de caracteres y campos grficos

Ejemplos de MOVE (Parte 2): Campos de longitud variable y fija


*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++ D* D* Ejemplo de MOVE 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 var10a S 10A INZ('0123456789') VARYING D var10b S 10A INZ('ZXCVBNM') VARYING D var15a S 15A INZ('FGH') VARYING D var15b S 15A INZ('FGH') VARYING D var15c S 15A INZ('QWERTYUIOPAS') VARYING C* C* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL C* C MOVE var15a var5a C* var5a = 'ABFGH' (longitud=5) C MOVE var10a var5b C* var5b = '56789' (longitud=5) C MOVE var5c var15a C* var15a = 'CDE' (longitud=3) C MOVE var10b var15b C* var15b = 'BNM' (longitud=3) C MOVE var15c var10b C* var10b = 'YUIOPAS' (longitud=7)

Figura 229. Operacin MOVE de un campo de longitud variable a un campo de longitud variable

Captulo 25. Cdigos de operacin

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

VisualAge RPG Consulta del lenguaje

*...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

Captulo 25. Cdigos de operacin

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

Ejemplos de MOVE (Parte 3)


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.
Campo de resultado Factor 1 *MDY *JUL *YMD *YMD0 *USA *ISO *JUL *MDY/ *CYMD& *CYMD0 *CMDY. *CDMY0 Factor 2 (carcter) 11-19-75 92/114 14/01/28 140128 12/31/9999 2036-05-21 45/333 03/05/33 121 07 08 1210708 107.08.21 1080721 Valor 75/323 23/04/92 01/28/2014 01/28/2014 31.12.9999 21/05/36 11/29/1945 03.05.33 08.07.2021 07,08,21 21-07-08 07/08/2021 08/07/2021 23.12.56 13:00.00 11:10:07 14.16.18 Tipo DTZ D(*JUL) D(*DMY) D*(USA) D(*USA) D(*EUR) D(*DMY) D(*USA) D(*MDY.) D(*EUR) D(*MDY,) D(*YMD-) D(*USA) D(*EUR) T(*ISO) T(*EUR) T(*JIS) T(*HMS.)

*LONGJUL- 2021-189 *HMS& *USA *EUR *JIS 23 12 56 1:00 PM 11.10.07 14:16:18

478

VisualAge RPG Consulta del lenguaje

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)

Captulo 25. Cdigos de operacin

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.

Ejemplos de MOVE (Parte 4)


Tabla 42. Mover un campo de fecha/hora a un campo de caracteres
Factor 2 Factor 1, entrada *JUL *DMY*USA *EUR *DMY, *USA *USA0 *MDY& *CYMD, *CMDY *CDMY*LONGJUL& *ISO *EUR *JIS *HMS, *USA Blanco Valor 11-19-75 92/114 14/01/28 12/31/9999 2036-05-21 45/333 45/333 03/05/33 03 07 08 21-07-08 07/08/2021 08/07/2021 23 12 56 11:00 AM 11.10.07 14:16:18 24.00.00 2045-10-27-23.34.59.123456 Tipo DTZ D(*MDY-) D(*JUL) D(*YMD) D(*USA) D(*ISO) D(*JUL) D(*JUL) D(*MDY) D(*DMY) D(*YMD-) D(*USA) D(*EUR) T(*HMS&) T(*USA) T(*EUR) T(*JIS) T(*ISO) Z(*ISO) Campo de resultado (carcter) 75/323 23-04-92 01/28/2014 31.12.9999 20,05,36 11/29/1945 11291945 03 05 33 1080721 107/08/21 108-07-21 2021 189 23.12.56 11.00.00 11:10:07 14,16,18 12:00 AM 2045-10-27-23.34.59.123456

Tabla 43. Mover un campo de fecha/hora a un campo numrico


Factor 2 Factor 1, entrada Valor Tipo DTZ Campo de resultado (numrico)

480

VisualAge RPG Consulta del lenguaje

Tabla 43. Mover un campo de fecha/hora a un campo numrico (continuacin)


*JUL *DMY*USA *EUR *DMY *USA *MDY& *CYMD, *CMDY *CDMY*LONGJUL& *ISO *EUR *JIS *HMS, *ISO 11-19-75 92/114 14/01/28 12/31/9999 2036-05-21 45/333 03/05/33 03 07 08 21-07-08 07/08/2021 08/07/2021 231256 11:00 AM 11.10.07 14:16:18 2045-10-27-23.34.59.123456 D(*MDY-) D(*JUL) D(*YMD) D(*USA) D(*ISO) D(*JUL) D(*MDY) D(*MDY&) D(*YMD-) D(*USA) D(*EUR) T(*HMS&) T(*USA) T(*EUR) T(*JIS) Z(*ISO) 75323 230492 01282014 31129999 210536 11291945 030533 1080307 1070821 1080721 2021189 231256 110000 111007 141618 20451027233459123456

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)

Captulo 25. Cdigos de operacin

481

Tabla 44. Mover campos de fecha-hora a campos de fecha-hora (continuacin)


N/A 1985-12-0314.23.34.123456 Z(*ISO) 02:23 PM T(*USA)

Ejemplos de MOVE (Parte 5)


La tabla siguiente muestra ejemplos de operaciones de mover un campo de fecha a un campo de caracteres. 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('ABCDEFGHIJabcdefghij')

Tabla 45. Mover un campo de fecha a un campo de caracteres


Factor 2 Cdigo de operacin MOVE MOVE (P) MOVEL MOVEL (P) Valor 11 19 75 11 19 75 11 19 75 11 19 75 Tipo DTZ D(*MDY&) D(*MDY&) D(*MDY&) D(MDY&) ABCDEFGHIJ1975-11-19 1975-11-19 1975-11-19abcdefghij 1975-11-19 Valor del campo de resultado despus de la operacin MOVE

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 46. Mover un campo de hora a un campo numrico


Factor 2 Cdigo de operacin MOVE MOVE (P) MOVEL MOVEL (P) Valor 9:42 PM 9:42 PM 9:42 PM 9:42 PM Tipo DTZ T(*USA) T(*USA) T(*USA) T(*USA) Valor del campo de resultado despus de la operacin MOVE 11111111111111214200 00000000000000214200 21420011111111111111 21420000000000000000

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

VisualAge RPG Consulta del lenguaje

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

MOVEA (Mover matriz)


Cdigo MOVEA (P) Factor 1 Factor 2 Origen Campo de resultado Destino Indicadores + ZB

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.

Operaciones MOVEA de tipo carcter, grfico y UCS-2


Tanto el factor como el resultado deben definirse como de tipo carcter, grfico o UCS-2. Los CCSID grfico y UCS-2 deben ser los mismos, a no ser que, en el caso de los campos de tipo grfico, se haya especificado CCSID(*GRAPH: *IGNORE) en la especificacin de control. Mover datos finaliza cuando el nmero de caracteres trasladado es igual a la longitud del campo ms corto de los especificados por el factor 2 y el campo del resultado. La operacin MOVEA podra terminar en medio de un elemento de matriz. No se permiten matrices de longitud variable.

Operaciones MOVEA numricas


Los datos que se mueven entre campos y elementos de matriz deben tener la misma longitud. El factor 2 y el campo del resultado deben contener campos
Captulo 25. Cdigos de operacin

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.

Operaciones MOVEA de decimal con zona


Para mover una matriz de formato decimal con zona: v Defina la matriz numrica como un subcampo de una estructura de datos v Vuelva a definir la matriz numrica en la estructura de datos como una matriz de caracteres. Despus, puede utilizar MOVEA de la misma manera en que lo hara para mover matrices de caracteres.

Especificar constantes figurativas con MOVEA


Para mover una constante figurativa, la longitud de la constante debe ser igual a la parte de la matriz que est especificada. En las constantes figurativas de matrices numricas, se ignoran los lmites del elemento excepto por el signo que se pone en cada elemento de matriz. Por ejemplo: v MOVEA *BLANK ARR(X) A partir del elemento X, el resto de ARR contiene espacios en blanco. v MOVEA *ALLXYZARRR(X) ARR tiene elementos de caracteres de 4 bytes. Se ignoran los lmites del elemento. A partir del elemento X, el resto de la matriz contiene XYZXYZXYZYXZ....

484

VisualAge RPG Consulta del lenguaje

*...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.

ARRX . 12 34 5 6 7 8 9 0 Antes de MOVEA

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.

ARRX . Antes de 12 34 5 6 7 8 9 0 MOVEA

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

Figura 236. Matriz a matriz - Campo de resultado indexado

Captulo 25. Cdigos de operacin

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.

ARRX . Antes de 12 34 5 6 7 8 9 0 MOVEA

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

Figura 237. Matriz a matriz - Elementos de matriz con longitudes distintas


*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C MOVEA ARRX(4) ARRY C* Mover de matriz a matriz, factor 2 indexado con elementos de C* matriz de distinta longitud.

ARRX . Antes de 12 34 5 6 7 8 9 0 MOVEA

ARRY AA A BBBCCC DDD

Un elemento

Un elemento

. 12 34 5 6 7 8 9 0

Despus de 7 8 9 0 . B BCCCD DD MOVEA

Figura 238. Matriz a matriz - Factor 2 indexado

486

VisualAge RPG Consulta del lenguaje

*...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

Figura 239. Matriz a matriz - Sin indexacin


*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* En el ejemplo siguiente, N=3. Mover de matriz a campo con C* indexacin variable. C MOVEA ARRX(N) FIELD C*

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

Figura 240. Matriz a campo - Indexacin variable

Captulo 25. Cdigos de operacin

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

Figura 241. Matriz a matriz - Elementos numricos


*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C MOVEA(P) ARRX ARRY C* Mover de matriz a matriz con relleno. Sin indexacin; matriz de C* distinta longitud con la misma longitud de elementos.

ARRX . Antes de 12 34 5 6 7 8 9 0 MOVEA

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

Figura 242. Matriz a matriz - Con relleno


*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C MOVEA(P) ARRB ARRZ C* C* Mover de matriz a matriz y mostrar elementos numricos con relleno.

. 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

1.3

. . 0.0

Figura 243. Matriz a matriz - Elementos numricos con relleno

488

VisualAge RPG Consulta del lenguaje

*...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

Figura 244. Matriz a matriz - Con relleno, sin indexacin

MOVEL (Mover a la izquierda)


Cdigo Factor 1 Factor 2 Campo de origen Campo de resultado Campo de destino Indicadores + ZB

MOVEL (P) Atributos de datos

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.

Captulo 25. Cdigos de operacin

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.

El factor 2 es de la misma longitud que el campo de resultado


El factor 2 y el campo de resultado tienen la misma longitud: v Si el factor 2 y el campo del resultado son numricos, el signo se transfiere a la posicin situada ms a la derecha. v Si el factor 2 y el campo de resultado son ambos de caracteres, se transfieren todos los caracteres. v Si el factor 2 es numrico y el campo del resultado es de caracteres, el signo se transfiere a la posicin situada ms a la derecha. v Si el factor 2 es de caracteres y el campo del resultado es numrico, se transfiere una zona negativa a la posicin situada ms a la derecha del campo del resultado si la zona de la posicin situada ms a la derecha del factor 2 es una zona negativa. Sin embargo, si la zona de ms a la derecha del factor 2 no es una zona negativa, se transfiere una zona positiva a la posicin de ms a la derecha del campo del resultado. Las partes de dgito se convierten a sus caracteres numricos correspondientes. Si las partes de dgito no son dgitos vlidos, se produce un error de excepcin de datos. v Si el factor 2 y el campo del resultado son ambos de tipo grfico o UCS-2, se transfieren todos los caracteres de tipo grfico o UCS-2. v Si el factor 2 es de tipo grfico y el campo del resultado es de tipo de caracteres, se transfieren todos los caracteres grficos. v Si el factor 2 es de caracteres y el campo del resultado es grfico, se transfieren todos los caracteres.

El factor 2 es mayor que el campo de resultado


El factor 2 es mayor que el campo de resultado: v Si el factor 2 y el campo del resultado son numricos, el signo de la posicin situada ms a la derecha del factor 2 se transfiere a la posicin situada ms a la derecha del campo del resultado. v Si el factor 2 es numrico y el campo del resultado es de caracteres, el campo del resultado slo contiene caracteres numricos. Slo se transfiere el nmero de caracteres necesarios para rellenar el campo del resultado. v Si el factor 2 es de caracteres y el campo del resultado es numrico, se transfiere una zona negativa a la posicin situada ms a la derecha del campo del resultado si la zona de la posicin situada ms a la derecha del factor 2 es una zona negativa. Sin embargo, si la zona de ms a la derecha del factor 2 no es una zona negativa, se transfiere una zona positiva a la posicin de ms a la derecha del campo del resultado. Otras posiciones del campo de resultado contiene slo caracteres numricos.

490

VisualAge RPG Consulta del lenguaje

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.

El factor 2 es ms corto que el campo de resultado


El factor 2 es ms corto que el campo de resultado: v Si el factor 2 es numrico o de caracteres y el campo del resultado es numrico, la parte de dgitos del factor 2 sustituye al contenido de las posiciones situadas ms a la izquierda del campo del resultado. El signo en la posicin situada ms a la derecha del campo del resultado no se modifica. v Si el factor 2 es numrico o de caracteres y el campo del resultado es de caracteres, los caracteres del factor 2 sustituyen el nmero equivalente de posiciones situadas ms a la izquierda en el campo del resultado. No se realiza ninguna modificacin en la zona de la posicin situada ms a la derecha del campo del resultado.

El factor 2 es ms corto que el campo de resultado y se ha especificado P


Si el factor 2 es ms corto que el campo del resultado y se especifica P en el campo del ampliador de operacin: v La transferencia se realiza de la forma descrita en El factor 2 es ms corto que el campo de resultado v El campo del resultado se rellena por la derecha. 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 249 a 254.

Captulo 25. Cdigos de operacin

491

Factor 2 con la misma longitud que el campo de resultado


Factor 2 Campo de resultado + 5 6 7 84 _ 7 8 4 25

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

Antes de MOVE Despus de MOVE Antes de MOVE Despus de MOVE

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

Figura 245. El factor 2 y el campo de resultado tienen la misma longitud

Factor 2 ms largo que el campo de resultados


Factor 2 Campo de resultados + 5 6 7 8 4

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

Antes de MOVE Despus de MOVE

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

Antes de MOVE Despus de MOVE

BRWC X H 4 S t

d. Carcter a Carcter

BRWC X H 4 S N BRWC X H 4 S N

Antes de MOVE Despus de MOVE

A K T 4 D B RWCX

Figura 246. El factor 2 es mayor que el campo de resultado

492

VisualAge RPG Consulta del lenguaje

Factor 2 ms corto que el campo de resultado


Factor 2 Campo de resultado + 1 3 0 9 4 3 2 1 0 + 7 8 4 2 5 3 2 1 0 + 1 3 0 9 4 3 2 1 0 + 3 0 4 5 5 3 2 1 0

A.

Numrico a Numrico

7 8 4 2 5 7 8 4 2 5

Antes de MOVE Despus de MOVE

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. _

Antes de MOVE Despus de MOVE

BRWC X H 4 S A

7 8 4 2 t H 4 S A

C P T 5 N

Carcter a Carcter

Antes de MOVE Despus de MOVE

BRWC X H 4 S A C P T 5 NH 4 S A

C P T 5 N

Nota: en el ejemplo anterior, 4 = letra t; la flecha equivale a la coma decimal

Figura 247. El factor 2 es ms corto que el campo de resultado

Captulo 25. Cdigos de operacin

493

Factor 2 ms corto que el campo de resultado Con P en el campo ampliador de operacin


Factor 2 _ 7 8 4 2 5 Campo de resultado + Antes de MOVE 1 3 0 9 4 3 2 1 0 +

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. _

Antes de MOVE Despus de MOVE

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

Nota: en el ejemplo anterior, 4 = letra t; la flecha equivale a la coma decimal.

Figura 248. El factor 2 es ms corto que el resultado con P especificada

494

VisualAge RPG Consulta del lenguaje

Ejemplos de MOVEL: Movimientos de longitud variable / longitud fija


*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++ D* D* Ejemplo de MOVEL 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* D* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL C* C MOVEL var15a var5a C* var5a = 'FGHDE' (longitud=5) C MOVEL var10 var5b C* var5b = '01234' (longitud=5) C MOVEL var5c var15a C* var15a = 'ABC' (longitud=3) C MOVEL var10 var15b C* var15b = '012' (longitud=3)

Figura 249. MOVEL: de campo de longitud variable a campo de longitud variable


*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++ D* D* Ejemplo de MOVEL 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 fix10 S 10A INZ('') D* D* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL C* C MOVEL var5 fix5a C* fix5a = 'ABCDE' C MOVEL var10 fix5b C* fix5b = '01234' C MOVEL var15 fix5c C* fix5c = 'FGHPQ'

Figura 250. MOVEL: de campo de longitud variable a campo de longitud fija

Captulo 25. Cdigos de operacin

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)

Figura 251. MOVEL: de campo de longitud fija a campo de longitud variable


*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++ D* D* Ejemplo de MOVEL(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('FGHIJKLMN') VARYING D* D* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL C* C MOVEL(P) var15a var5a C* var5a = 'FGH ' (longitud=5) C MOVEL(P) var10 var5b C* var5b = '01234' (longitud=5) C MOVEL(P) var5c var15b C* var15b = 'ABC' (longitud=3) C MOVEL(P) var15a var15c C* var15c = 'FGH ' (longitud=9)

Figura 252. MOVEL(P): de campo de longitud variable a campo de longitud variable

496

VisualAge RPG Consulta del lenguaje

*...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 '

Figura 253. MOVEL(P): de campo de longitud variable a campo de longitud fija


*...1....+....2....+....3....+....4....+....5....+....6....+....7....+.... DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++ D* D* Ejemplo de MOVEL(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('FGH') VARYING D fix5 S 10A INZ('.....') D fix10 S 10A INZ('PQRSTUVWXY') D* D* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL C* C MOVEL(P) fix10 var5 C* var5 = 'PQRST' (longitud=5) C MOVEL(P) fix5 var10 C* var10 = '..... ' (longitud=10) C MOVEL(P) fix10 var15a C* var15a = 'PQRSTUVWXY ' (longitud=13) C MOVEL(P) fix10 var15b C* var15b = 'PQR' (longitud=3)

Figura 254. MOVEL(P): de campo de longitud fija a campo de longitud variable

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.

MVR (Mover resto)


Cdigo MVR Factor 1 Factor 2 Campo de resultado Resto Indicadores + Z

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

VisualAge RPG Consulta del lenguaje

OCCUR (Establecer/Obtener aparicin de una estructura de datos)


Cdigo Factor 1 Factor 2 Campo de resultado Valor de aparicin Indicadores _ ER _

OCCUR (E) Valor de aparicin Estructura de datos

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.

Captulo 25. Cdigos de operacin

499

FLDA

FLDB

50 aparicin 49 aparicin

FLDC

FLDD

FLDA

FLDB

FLDC

FLDD

FLDA

FLDB

3 aparicin 2 aparicin 1 aparicin

FLDC

FLDD

FLDA

FLDB

FLDC

FLDD

FLDA

FLDB

FLDC

FLDD

DS1

DS2

Figura 255. Ejemplo de operacin OCCUR

500

VisualAge RPG Consulta del lenguaje

*...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

Figura 256. Ejemplo de operacin OCCUR

Captulo 25. Cdigos de operacin

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

Figura 257. Ejemplo de operacin OCCUR

OPEN (Abrir archivo para proceso)


Cdigo OPEN (E) Factor 1 Factor 2 Nombre de archivo Campo de resultado Indicadores _ ER _

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

VisualAge RPG Consulta del lenguaje

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

Figura 258. Operacin OPEN con operacin CLOSE

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

Captulo 25. Cdigos de operacin

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.

OTHER (De lo contrario, seleccionar)


Cdigo OTHER Factor 1 Factor 2 Campo de resultado Indicadores

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

VisualAge RPG Consulta del lenguaje

*...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

Figura 259. Operacin OTHER

OUT (Grabar un rea de datos)


Cdigo OUT (E) Factor 1 *LOCK Factor 2 Nombre de rea de datos Campo de resultado Indicadores _ ER _

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.

Captulo 25. Cdigos de operacin

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.

PARM (Identificar parmetros)


Cdigo PARM Factor 1 Factor 2 Campo de resultado Parmetro Indicadores

Campo de destino Campo de origen

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

VisualAge RPG Consulta del lenguaje

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).

Reglas generales acerca de los parmetros


La ubicacin de almacenamiento para cada campo de parmetro est en el programa o procedimiento de llamada. La direccin de la ubicacin de almacenamiento del campo del resultado en una operacin PARM se pasa al programa llamado. Si el programa o procedimiento llamado cambia el valor de un parmetro, cambia los datos de esa ubicacin de almacenamiento. Cuando el control retorna al programa o procedimiento de llamada, cambia el parmetro de ste (es decir, el campo del resultado). Incluso si el programa o procedimiento de llamada termina en error despus de cambiar el valor de un parmetro, el valor cambiado existe en el programa o procedimiento de llamada. Para proteger la informacin pasada al programa o procedimiento de llamada para su utilizacin posterior, especifique en el factor 2 el nombre del campo que contiene la informacin que desea pasar al programa o procedimiento de llamada. Se copia el factor 2 en el campo del resultado, y las direcciones de almacenamiento pasan al programa o procedimiento de llamada. Debido a que se accede a los campos de parmetros mediante direccin, no nombre de campo, los parmetros de llamada y llamados no tienen que utilizar los mismos nombres de campo para los campos que se pasan. Los atributos de los campos de parmetros correspondientes en los programas o procedimientos de llamada o llamados deben ser los mismos. Si no lo son, pueden producirse resultados indeseables.
Captulo 25. Cdigos de operacin

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.

PLIST (Identificar una lista de parmetros)


Cdigo PLIST Factor 1 Nombre de PLIST Factor 2 Campo de resultado Indicadores

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

VisualAge RPG Consulta del lenguaje

*...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

Figura 260. Operaciones PLIST/PARM

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

Captulo 25. Cdigos de operacin

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.

READ (Leer un registro)


Cdigo READ (E N) READ (E N) READ (E) Factor 1 Factor 2 Nombre de archivo Nombre de registro Nombre de ventana Campo de resultado Estructura de datos Indicadores _ _ _ ER ER ER EOF EOF _

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

VisualAge RPG Consulta del lenguaje

Lectura desde un archivo


El factor 2 debe contener el nombre de un formato de registro o de un archivo controlado en clculo. Un nombre de formato de registro en el factor 2 slo se permite con un archivo descrito externamente (E en la posicin 22 de las especificaciones de descripcin de archivo). Puede darse el caso de que una operacin READ por nombre de formato reciba un formato distinto al especificado en el factor 2. En ese caso, la operacin READ finaliza con un error. Si el archivo especificado en el factor 2 est descrito por programa, el campo del resultado puede contener el nombre de una estructura de datos. El registro se lee hacia dicha estructura de datos sin procesar las especificaciones de entrada para el archivo. Un archivo descrito por programa se identifica por una letra F situada en la posicin 22 de las especificaciones de descripcin de archivo. Consulte el apartado Operaciones de archivos en la pgina 380 para obtener informacin sobre cmo se transfieren datos entre el archivo y la estructura de datos. Si la operacin READ se realiza satisfactoriamente, el archivo se coloca en el siguiente registro que satisface la lectura. Si se produce un error o una condicin de fin de archivo, debe volver a posicionar el archivo (utilizando una operacin CHAIN, SETLL o SETGT). Si el archivo 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. Nota: No se da soporte al bloqueo para archivos locales. Para manejar las excepciones de READ (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 para sealar si se ha producido un fin de archivo en la operacin READ. El indicador se activa (condicin EOF) o desactiva cada vez que se lleva a cabo la operacin READ. 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. El archivo debe volver a posicionarse despus de una condicin EOF para procesar otras operaciones secuenciales satisfactorias (por ejemplo, READ o READP) para el archivo. 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.

Captulo 25. Cdigos de operacin

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

Figura 261. Operacin READ para archivos

Lectura desde una ventana


Las ventanas se manejan como archivos descritos externamente. El nombre de ventana se trata como un nombre de formato de registro. Si se especifica un nombre de ventana para el factor 2, la operacin READ obtiene los atributos de los componentes de recuadro de combinacin, recuadro de seleccin, campo de entrada, botn de seleccin y texto esttico de la ventana. El atributo para los componentes de entrada es TEXT. El atributo para los componentes de texto esttico es LABEL. Cuando se lee una ventana, las operaciones de obtencin de atributo se realizan sobre todos los componentes de texto esttico y de campo de entrada. Los valores se almacenan en campos que coinciden con los valores en la pantalla. Despus de la operacin READ, 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 READ en lugar de mltiples operaciones GETATR. Por ejemplo, si la ventana INVENTORY contiene los componentes de campo de entrada ENT0000B y ENT0000C, una operacin READ de la ventana realiza lo equivalente a lo siguiente:
CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....Comments++++++ CSRN01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++++Comments++++++ C EVAL ENT0000B = %GETATR('INVENTORY':'ENT0000B':'TEXT') C EVAL ENT0000C = %GETATR('INVENTORY':'ENT0000C':'TEXT')

Figura 262. Operacin READ para ventanas

512

VisualAge RPG Consulta del lenguaje

READC (Leer siguiente registro modificado)


Cdigo READC (E) Factor 1 Factor 2 Nombre de subarchivo Campo de resultado Indicadores _ ER EOF

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.

Captulo 25. Cdigos de operacin

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

Figura 263. Ejemplo de la operacin READC

READE (Leer clave igual)


Cdigo READE (E N) READE (E N) Factor 1 Argumento de bsqueda Argumento de bsqueda Factor 2 Nombre de archivo Nombre de registro Campo de resultado Indicadores _ _ ER ER EOF EOF

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

VisualAge RPG Consulta del lenguaje

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.

Captulo 25. Cdigos de operacin

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

Figura 264. Operacin READE

READP (Leer registro anterior)


Cdigo READP (E N) READP (E N) Factor 1 Factor 2 Nombre de archivo Nombre de registro Campo de resultado Estructura de datos Indicadores _ _ ER ER BOF BOF

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

VisualAge RPG Consulta del lenguaje

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.

Captulo 25. Cdigos de operacin

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

Figura 265. Operacin READP

READPE (Leer igual anterior)


Cdigo Factor 1 Factor 2 Nombre de archivo Nombre de registro Campo de resultado Estructura de datos Indicadores _ _ ER ER BOF BOF

READPE (E Argumento de N) bsqueda READPE (E Argumento de N) bsqueda

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

VisualAge RPG Consulta del lenguaje

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.

Captulo 25. Cdigos de operacin

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

Figura 266. Operacin READPE

READS (Leer seleccionados)


Cdigo READS (E) Factor 1 Factor 2 Nombre de subarchivo Campo de resultado Indicadores _ ER EOF

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

VisualAge RPG Consulta del lenguaje

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*

Figura 267. Operacin READS

REALLOC (Reasignar almacenamiento con longitud nueva)


Cdigo REALLOC (E) Factor 1 Factor 2 Longitud Campo de resultado Puntero _ Indicadores ER _

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'

Figura 268. Operacin REALLOC

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

VisualAge RPG Consulta del lenguaje

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.

Cmo restablecer los campos de entrada y el texto esttico de una ventana


Si el campo del resultado contiene un nombre de ventana, el factor 1 y el factor 2 deben estar en blanco. Cuando se restablece una ventana, los componentes de los campos de entrada y los componentes del texto esttico de la ventana se restablecen en sus valores iniciales. Los componentes se restablecen en los valores iniciales de los campos correspondientes del programa; no se restablecen en sus valores iniciales proporcionados al utilizar el diseador GUI. Los valores iniciales de los campos correspondientes son el valor que tenan al final de la inicializacin del programa. Este valor se establece utilizando el diseador GUI, en la especificacin de definicin o utilizando la subrutina de inicializacin. Los valores proporcionados en la subrutina de inicializacin (*INZSR) prevalecen sobre los proporcionados en una especificacin de definicin y los proporcionados en una especificacin de definicin prevalecen sobre los proporcionados al diseador GUI. Por ejemplo, la tabla siguiente muestra cmo afectan a la operacin RESET los valores para varios componentes de campos de entrada que se proporcionan en el diseador GUI y los valores para campos de la especificacin de definicin y en la subrutina de inicializacin (*INZSR):
Diseador GUI ENT0000B=22.5 ENT0000A=abc Especificacin de definicin ENT0000B=30.5 ENT0000A=xyz ENT0000A=pqr ENT0000C=Nombre *INZSR Valor despus de RESET ENT0000B=30.5 ENT0000A=pqr ENT0000C=Nombre Si ENT0000D es de caracteres, RESET restablece en espacios en blanco. Si ENT0000D es numrico, RESET restablece en cero.

Nota: Despus de la operacin RESET, los valores almacenados en los campos del programa coinciden con los valores visualizados en la pantalla.

Cmo restablecer los elementos de una estructura y de las variables


Los valores iniciales de una variable o estructura son los valores que tenan al final de la inicializacin del programa. Dicho valor puede establecerse utilizando la palabra clave INZ en la especificacin de definicin o utilizando la subrutina de inicializacin para asignar un valor inicial. Este valor inicial se utiliza por la operacin RESET. Los valores proporcionados en la subrutina de inicializacin (*INZSR) prevalecen sobre los proporcionados en una especificacin de definicin.

Captulo 25. Cdigos de operacin

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

VisualAge RPG Consulta del lenguaje

*...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

Figura 269. Operacin RESET

RETURN (Volver al llamador)


Cdigo RETURN (H M/R) Factor 1 Factor ampliado 2 Expresin

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.

Captulo 25. Cdigos de operacin

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

VisualAge RPG Consulta del lenguaje

SCAN (Buscar serie)


Cdigo SCAN (E) Factor 1 Factor 2 Campo de resultado Posicin ms a la izquierda Indicadores _ ER FD

Serie de Serie base:inicio comparacin:longitud

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

VisualAge RPG Consulta del lenguaje

*...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

Figura 270. Operacin SCAN


*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... DName+++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++++++++ D* D* Un ejemplo de SCAN Grfico D* D* El valor de Graffld es el grfico 'AACCBBGG'. D* El valor de Number tras la bsqueda es 3 ya que el tercer D* carcter grfico coincide con el valor del factor 1. D D Graffld 4G inz(G'AACCBBGG') CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. C* La operacin SCAN busca en la serie grfica del factor 2 una C* aparicin del literal grfico del factor 1. Al ser una operacin C* grfica, la operacin SCAN operar con 2 bytes cada vez. C C G'BB' SCAN Graffld:2 Number 5 0 90 C

Figura 271. Operacin SCAN utilizando grficos

Captulo 25. Cdigos de operacin

529

SELECT (Iniciar un grupo de seleccin)


Cdigo SELECT Factor 1 Factor 2 Campo de resultado Indicadores

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

VisualAge RPG Consulta del lenguaje

*...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

Figura 272. Operacin SELECT

SETATR (Establecer atributo)


Cdigo Factor 1 Factor 2 valor de atributo Campo de resultado atributo Indicadores _ ER _

SETATR (E) nombre de componente

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'

Figura 273. Operacin SETATR

SETGT (Establecer mayor que)


Cdigo SETGT (E) Factor 1 Argumento de bsqueda Factor 2 Nombre de archivo, Nombre de formato de registro Campo de resultado Indicadores NR ER _

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

VisualAge RPG Consulta del lenguaje

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.

Captulo 25. Cdigos de operacin

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

Figura 274. Operacin SETGT

Valores del campo de claves 97 97 97 97 FILEA 98 (SETGT) (READ) 100 100 100 101 101 (READ) (SETGT)

Valores del campo de claves 50 60 70 70 FILEB 80 80 80 90 90 91

Figura 275. Cmo situar archivos mediante la operacin SETGT

SETLL (Establecer lmite inferior)


Cdigo SETLL (E) Factor 1 Argumento de bsqueda Factor 2 Nombre de archivo Campo de resultado Indicadores NR ER EQ

534

VisualAge RPG Consulta del lenguaje

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.

Captulo 25. Cdigos de operacin

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.

Figura 276. Operacin SETLL

536

VisualAge RPG Consulta del lenguaje

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

Figura 277. Cmo situar archivos mediante la operacin SETLL

SETOFF (Desactivar indicador)


Cdigo SETOFF Factor 1 Factor 2 Campo de resultado Indicadores OF OF OF

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.

SETON (Activar indicador)


Cdigo SETON Factor 1 Factor 2 Campo de resultado Indicadores ON ON ON

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.

Captulo 25. Cdigos de operacin

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

Figura 278. Operaciones SETON y SETOFF

SHOWWIN (Visualizar ventana)


Cdigo SHOWWIN (E) Factor 1 Factor 2 Nombre de ventana Campo de resultado Indicadores _ ER _

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

VisualAge RPG Consulta del lenguaje

*...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'

Figura 279. Operacin SHOWWIN

SORTA (Clasificar una matriz)


Cdigo SORTA Factor 1 Factor 2 Nombre de matriz Campo de resultado Indicadores

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.

Captulo 25. Cdigos de operacin

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

Figura 280. Operacin SORTA


*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++ D* En este ejemplo, la matriz base tiene los valores aa44 bb33 cc22 dd11 D* de forma que la matriz de recubrimiento ARRO tiene los valores D* 44 33 22 11. D DS D ARR 4 DIM(4) ASCEND D ARRO 2 OVERLAY(ARR:3) D CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C C* Tras la operacin SORTA, la matriz base tiene los valores C* 11dd 22cc 33bb 44aa C C SORTA ARRO

Figura 281. Operacin SORTA con OVERLAY

SQRT (Raz cuadrada)


Cdigo SQRT (H) Factor 1 Factor 2 Valor Campo de resultado Raz Indicadores

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

VisualAge RPG Consulta del lenguaje

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.

START (Iniciar un componente lgico o Llamar a programa local)


Cdigo START (E) Factor 1 Factor 2 Nombre de componente lgico o nombre de campo Campo de resultado Nombre de PLIST Indicadores _ ER _

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.

Inicio de componentes lgicos


Como START es una operacin asncrona, tanto el componente llamado (destino) como el que llama (origen), as como cualquier otro componente activo de la aplicacin, pueden recibir eventos para partes habilitadas actualmente por todos los componentes de la aplicacin. Si se especifica el factor 2, debe contener un literal de caracteres que sea el nombre del componente o de una variable que contenga el nombre del componente. Si se especifica el campo del resultado, debe contener un nombre PLIST. Si no se especifica el campo del resultado, la operacin START puede ir seguida de una operacin PARM. Los parmetros se pasan por direccin. Esto significa que los componentes de origen y de destino pueden acceder a campos de parmetros. Se puede especificar un mximo de 20 parmetros. Si el componente iniciado est esperando un campo de longitud variable, debe utilizarse un campo de longitud variable como el parmetro. START inicializa un componente, ejecuta su *INZSR y despus vuelve al componente de origen. En el componente de origen, el factor 2 de la operacin PARM se copia en el campo del resultado de la operacin PARM. Cuando el control vuelve al componente de origen, el campo del resultado se copia en el factor 1. En el componente de destino, el campo del resultado se copia en el factor 1. Cuando el control vuelve al componente de origen, el factor 2 se copia en el campo del resultado si *INZSR se realiza satisfactoriamente. Cuando la operacin START ha terminado de inicializar el componente de destino, la subrutina de accin del componente de origen contina la ejecucin y el componente de destino permanece activo con sus subrutinas de accin habilitadas para recibir eventos.

Captulo 25. Cdigos de operacin

541

Llamada a programas locales


Si se utiliza START para llamar a un programa local, el programa de llamada efecta la llamada al programa local y despus contina. El programa llamado se ejecuta independientemente del programa de llamada. Si se especifica el factor 2, debe contener un nombre de especificacin de definicin para una constante o una definicin de campo. LINKAGE(*CLIENT) debe estar en la especificacin de definicin. Para obtener ms informacin, consulte LINKAGE(tipo_enlace) en la pgina 249. Si se especifica el campo del resultado, debe contener un nombre PLIST. Si no se especifica el campo del resultado, la operacin START puede ir seguida de una operacin PARM. Los parmetros se pasan por referencia. Consulte PARM (Identificar parmetros) en la pgina 506 y PLIST (Identificar una lista de parmetros) en la pgina 508. para obtener ms informacin sobre pasar parmetros. Nota: Los punteros y los punteros de procedimiento no estn permitidos como parmetros.
*...1....+....2....+....3....+....4....+....5....+....6....+....7... DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++Comments++ Dtest2 C 'testprog' LINKAGE (*CLIENT) CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq... C START test2

Figura 282. Operacin START

STOP (Detener un componente lgico)


Cdigo STOP (E) Factor 1 Factor 2 Nombre de componente lgico Campo de resultado Indicadores ER

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

VisualAge RPG Consulta del lenguaje

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'

Figura 283. Operacin STOP

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.

SUBDUR (Restar duracin)


Cdigo SUBDUR (E) (duracin) SUBDUR (E) (fecha nueva) Factor 1 Fecha/Hora/ Indicacin de la hora Fecha/Hora/ Indicacin de la hora Factor 2 Campo de resultado Indicadores _ ER _

Fecha/Hora/ Duracin: Indicacin de la hora Cdigo de duracin Duracin:Cdigo de duracin

Fecha/Hora/ _ Indicacin de la hora

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

Captulo 25. Cdigos de operacin

543

La Figura 284 en la pgina 546 ilustra la operacin SUBDUR.

Restar una duracin


Puede utilizarse la operacin SUBDUR para restar de un campo o de una constante especificada en el factor 1, una duracin especificada en el factor 2. La fecha, hora o indicacin de la hora resultantes se colocan en el campo especificado en el campo del resultado. El factor 1 es opcional y puede contener un campo de fecha, hora o indicacin de la hora, una matriz o un elemento de matriz, un literal o una constante. 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 el factor 1 no est especificado, la duracin se resta del campo especificado en el campo del resultado. El factor 2 es obligatorio y contiene dos subfactores. El primero es una duracin, que debe ser un campo numrico, matriz o una constante con cero posiciones decimales. La duracin debe tener 15 dgitos o menos. Si el campo de duracin es negativo, la duracin se suma al campo. 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. Por ejemplo, puede restar una duracin de aos, meses o das de un campo de fecha, pero no puede restarle una duracin de minutos. Para obtener una lista de los cdigos de duracin y sus formas abreviadas, consulte el apartado Operaciones de fecha en la pgina 377. El campo del 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 deja en blanco, la duracin se resta del valor del campo del resultado. Si el campo del resultado es una matriz, el valor del factor 2 se resta de cada elemento de la matriz. Si el campo del resultado es un campo de hora, el resultado siempre ser una hora vlida. Por ejemplo, si se resta 59 minutos de 00:58:59, se obtiene -00:00:01. Como esta hora no es vlida, el compilador la ajusta a 23:59:59. Cuando a una fecha se le resta una duracin expresada en meses, la regla general es que la parte de mes disminuye en el nmero de meses de la duracin y la parte de da no se altera. 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.
'95/05/30' SUBDUR 1:*MONTH da como resultado '95/04/30'

La parte de mes resultante ha disminuido en 1; la parte de da no se ha modificado.


'95/05/31' SUBDUR 1:*MONTH da como resultado '95/04/30'

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

VisualAge RPG Consulta del lenguaje

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.

Clculo de una duracin


La operacin SUBDUR puede utilizarse para calcular una duracin entre lo siguiente: v Dos fechas v Una fecha y una indicacin de la hora v Dos horas v Una hora y una indicacin de la hora v Dos indicaciones de la hora El factor 1 debe contener un campo, subcampo, matriz, elemento de matriz, constante o literal de fecha, hora o indicacin de la hora. El factor 2 debe contener tambin un campo, matriz, elemento de matriz, literal o constante de fecha, hora o indicacin de la hora. El cdigo de la duracin ha de ser coherente con uno de los elementos siguientes: v Factor 1 y factor 2 v *Years(*Y), *Months(*M) y *Days(*D) si el factor 1 y/o el factor 2 es una fecha v Indicacin de la hora, *Hours(*H), *Minutes(*MN) y *Seconds(*S) cuando el factor 1 y/o el factor 2 sea una hora o indicacin de la hora El resultado del clculo se expresa en unidades completas; el redondeo se realiza hacia abajo. El clculo de las duraciones incluye los microsegundos. Por ejemplo, si la duracin real es de 384 das, y se pide el resultado en aos, el resultado ser 1 ao completo porque hay 1,05 aos en 384 das. Una duracin de 59 minutos expresada en horas dar como resultado 0 horas. El campo del resultado consta de dos subfactores. El primero es el nombre de un campo numrico de cero decimales, una matriz o un elemento de matriz en el cual se coloca el resultado de la operacin. El segundo subfactor contiene el cdigo de duracin que denota el tipo de duracin. El cdigo de duracin debe ser coherente con el factor 1 y el factor 2. El campo del resultado ser negativo si la fecha del factor 1 es anterior a la fecha del factor 2. Para obtener ms informacin acerca de cmo trabajar con campos de fecha y hora, consulte la seccin Operaciones de fecha en la pgina 377. El clculo de una duracin en microsegundos (*mseconds) puede exceder el lmite del sistema de 15 dgitos para las Duraciones. Esto produce errores o su truncamiento. Esta situacin se produce cuando hay una diferencia de ms de 32 aos y 9 meses entre las entradas del factor 1 y del factor 2. 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.

Captulo 25. Cdigos de operacin

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

Figura 284. Operaciones SUBDUR

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

VisualAge RPG Consulta del lenguaje

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

Figura 285. Operacin SUBST

Captulo 25. Cdigos de operacin

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

Figura 286. Operacin SUBST con el ampliador de operacin P

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

VisualAge RPG Consulta del lenguaje

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 (Comprobar fecha/hora/indicacin de la hora)


Cdigo TEST (E) Factor 1 Factor 2 Campo de resultado Campo de Fecha/Hora o Indicacin de la hora Formato de fecha Campo de caracteres o numrico Campo de caracteres o numrico Campo de caracteres o numrico _ Indicadores ER _

TEST (D E)

ER

TEST (E T)

Formato de hora

ER

TEST (E Z)

Formato de indicacin de la hora

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.

Captulo 25. Cdigos de operacin

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

VisualAge RPG Consulta del lenguaje

*...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

Figura 287. Ejemplo de la operacin TEST (D/T/Z)

TESTB (Comprobar bit)


Cdigo TESTB Factor 1 Factor 2 Nmeros de bit Campo de resultado Campo de caracteres Indicadores OF ON EQ

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

VisualAge RPG Consulta del lenguaje

*...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

Figura 288. Operacin TESTB

TESTN (Comprobar numrico)


Cdigo TESTN Factor 1 Factor 2 Campo de resultado Campo de caracteres Indicadores NU BN BL

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).

TESTZ (Comprobar zona)


Cdigo TESTZ Factor 1 Factor 2 Campo de resultado Campo de caracteres Indicadores +

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

TIME (Hora del da)


Cdigo TIME Factor 1 Nombre alias Factor 2 Campo de resultado Campo de destino Indicadores

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

VisualAge RPG Consulta del lenguaje

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.

Captulo 25. Cdigos de operacin

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

Figura 289. Operacin TIME

UNLOCK (Desbloquear un rea de datos o Liberar un registro)


Cdigo UNLOCK (E) Factor 1 Factor 2 rea de datos o nombre de archivo Campo de resultado Indicadores _ ER _

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.

Cmo desbloquear las reas de datos


El factor 2 debe contener el nombre del rea de datos que se ha de desbloquear o la palabra reservada *DTAARA. Cuando se especifica *DTAARA, se desbloquean todas las reas de datos que estn bloqueadas en el programa. El rea de datos debe estar ya especificada en el campo del resultado de una sentencia *DTAARA DEFINE o con la palabra clave DTAARA en la especificacin de definicin. Si se especifica la operacin UNLOCK en un rea de datos ya desbloqueada, no se produce error.

556

VisualAge RPG Consulta del lenguaje

*...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

Figura 290. Operacin para desbloquear reas de datos

Cmo liberar los bloqueos de los registros


La operacin UNLOCK desbloquea el ltimo registro bloqueado en un archivo de disco de actualizacin. El factor 2 debe contener el nombre del archivo de disco UPDATE.
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... FFilename++IT.A.FRlen+......A.Device+.Keywords+++++++++++++++++++++++++++++ F* FUPDATA UF E DISK REMOTE F* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* Suponga que el archivo UPDATA contiene el formato de registro C* VENDOR. Se lee un registro de UPDATA. Debido a que el archivo C* es de actualizacin, el registro se bloquea. *IN50 se coloca en C* cualquier otro lugar del programa para controlar si tendr lugar C* un UPDATE. En caso contrario se desbloquea el registro utilizando C* la operacin UNLOCK. Observe que el factor 2 de la operacin C* UNLOCK es el nombre de archivo, UPDATA, no el formato de registro, C* VENDOR. C* C READ VENDOR 12 C : C *IN50 IFEQ *ON C UPDATE VENDOR C ELSE C UNLOCK UPDATA 99 C ENDIF

Figura 291. Operacin de desbloqueo de registros

UPDATE (Modificar registro existente)


Cdigo UPDATE (E) Factor 1 Factor 2 Nombre de archivo Campo de resultado Estructura de datos Indicadores _ ER _

Captulo 25. Cdigos de operacin

557

Cdigo UPDATE (E)

Factor 1

Factor 2 Nombre de formato de registro, nombre de subarchivo

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.

WHEN (Seleccionar cuando sea verdadero)


Cdigo WHEN (M/R) Factor 1 Factor ampliado 2 Expresin de indicador

558

VisualAge RPG Consulta del lenguaje

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

Figura 292. Operacin WHEN

WHENxx (Seleccionar cuando sea verdadero)


Cdigo WHENxx Factor 1 Comparando Factor 2 Comparando Campo de resultado Indicadores

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.

Captulo 25. Cdigos de operacin

559

Consulte en Operaciones de comparacin en la pgina 375 los valores de xx.


*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... C* C* El ejemplo siguiente muestra grupos SELECT anidados. El tipo C* de empleado puede ser 'C' para ocasional, 'T' para retirado, C* 'R' para normal y 'S' para estudiante. En funcin del tipo de C* empleado (EmpTyp), vara el nmero de das libres al ao (Days). C* C SELECT C EmpTyp WHENEQ 'C' C EmpTyp OREQ 'T' C Z-ADD 0 Days C EmpTyp WHENEQ 'R' C* C* Cuando el tipo de empleado es 'R', los das libres tambin C* dependen de los aos trabajados. El nmero de das base es 14. C* Para menos de 2 aos, no se aaden das. Entre 2 y 5 aos C* se aaden 5 das. Entre 6 y 10 aos se aaden 10 das C* y para ms de 10 aos se aaden 20 das. C* C Z-ADD 14 Days C* C* Grupo de seleccin anidado. C SELECT C Years WHENLT 2 C Years WHENLE 5 C ADD 5 Days C Years WHENLE 10 C ADD 10 Days C OTHER C ADD 20 Days C ENDSL C* Fin del grupo de seleccin anidado. C* C EmpTyp WHENEQ 'S' C Z-ADD 5 Days C ENDSL

Figura 293. Operacin WHENxx

560

VisualAge RPG Consulta del lenguaje

*...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

Figura 294. Operacin WHENxx

WRITE (Crear nuevos registros)


Cdigo WRITE (E) WRITE (E) Factor 1 Factor 2 Nombre de archivo Nombre de formato de registro, Subarchivo o Ventana Campo de resultado Estructura de datos Indicadores _ _ ER ER EOF EOF

La operacin WRITE graba datos en un archivo o ventana.

Cmo grabar en un archivo


El factor 2 debe contener el nombre de un archivo o de un formato de registro. Dicho archivo se identifica por una letra F en la posicin 18 de las especificaciones de descripcin de archivo. Debe ser un archivo controlado en clculo.
Captulo 25. Cdigos de operacin

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

Figura 295. Operacin WRITE para archivos

Cmo grabar en una ventana


Si se especifica el nombre de una ventana en el factor 2, la operacin WRITE establece los atributos del texto esttico y de los componentes de campo de la ventana. El atributo para los componentes de entrada es TEXT. El atributo para los componentes de texto esttico es LABEL. Tanto el campo del resultado como el ampliador de operacin deben estar en blanco.

562

VisualAge RPG Consulta del lenguaje

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

Figura 296. Operacin WRITE para Windows

Cmo grabar en un subarchivo


Si se especifica un subarchivo en el factor 2, la operacin WRITE aade un nuevo registro al subarchivo. Los registros que se graban en un componente de subarchivo se aaden al final del subarchivo. 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.

XFOOT (Sumar los elementos de una matriz)


Cdigo XFOOT (H) Factor 1 Factor 2 Nombre de matriz Campo de resultado Suma Indicadores + Z

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.

Captulo 25. Cdigos de operacin

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

VisualAge RPG Consulta del lenguaje

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

Figura 297. Operacin XLATE


*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D* D* En el ejemplo siguiente, todos los valores de STRING se convierten D* a maysculas. Como resultado, RESULT='RPG DEP'. D* D Up C 'ABCDEFGHIJKLMNOPQRSD 'TUVWXYZ' D Lo C 'abcdefghijklmnopqrsD 'tuvwxyz' C* CSRN01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.. C C MOVE 'rpg dep' String 7 C Lo:Up XLATE String Result 90 C* C* En el ejemplo siguiente, todos los valores de la serie se convierten C* a minsculas. Como resultado, RESULT='rpg dep'. C* C MOVE 'RPG DEP' String 7 C Up:Lo XLATE String Result 90

Figura 298. Operacin XLATE con constantes con nombre

Z-ADD (Poner a cero y sumar)


Cdigo Z-ADD (H) Factor 1 Factor 2 Sumando Campo de resultado Suma Indicadores + Z

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

Z-SUB (Poner a cero y restar)


Cdigo Z-SUB (H) Factor 1 Factor 2 Sustraendo Campo de resultado Diferencia Indicadores + Z

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

VisualAge RPG Consulta del lenguaje

Parte 5. Apndices

Copyright IBM Corp. 1994, 2000

567

568

VisualAge RPG Consulta del lenguaje

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

Parmetros pasados a los programas remotos de AS/400 (CALL)

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.

Copyright IBM Corp. 1994, 2000

569

570

VisualAge RPG Consulta del lenguaje

Apndice B. Resumen de cdigos de operacin


En la siguiente tabla se muestra un resumen de los cdigos de operacin. v Una columna vaca indica que el campo debe estar en blanco v Todos los campos subrayados son obligatorios v Un espacio subrayado indica que no hay ningn indicador resultante en dicha posicin v Smbolos: + Ms

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

Copyright IBM Corp. 1994, 2000

571

Tabla 49. Resumen de especificaciones de cdigo de operacin


Indicadores resultantes 71-72 73-74 75-76 + ER ER Z

Cdigos ADD (H) ADDDUR (E) ALLOC (E) ANDxx BEGACT BEGSR BITOFF BITON CABxx CALL (E) CALLB (E)

Factor 1 Sumando Fecha/Hora

Factor 2 Sumando Duracin:Cdigo de duracin Longitud

Campo de resultado Suma Fecha/Hora Puntero

Comparando Nombre de componente Nombre de subrutina

Comparando Nombre de evento Nombre de ventana

Nmeros de bit Nmeros de bit Comparando Comparando Nombre del programa Nombre de procedimiento o Puntero de procedimiento

Campo de caracteres Campo de caracteres Etiqueta Nombre Plist Nombre Plist HI LO ER ER EQ

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

CLOSE (E) CLSWIN (E) COMMIT (E) COMP


1

Nombre de archivo o bien *ALL Nombre de ventana

DEALLOC (E/N)

572

VisualAge RPG Consulta del lenguaje

Tabla 49. Resumen de especificaciones de cdigo de operacin (continuacin)


Indicadores resultantes 71-72 73-74 75-76

Cdigos DEFINE DEFINE DELETE (E)

Factor 1 *LIKE *DTAARA

Factor 2 Campo al que se hace referencia rea de datos externos

Campo de resultado Campo definido Campo interno

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

Apndice B. Resumen de cdigos de operacin

573

Tabla 49. Resumen de especificaciones de cdigo de operacin (continuacin)


Indicadores resultantes 71-72 73-74 75-76

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)

Factor 1 Comparando *LOCK

Factor 2 Comparando Nombre de rea de datos

Campo de resultado

ER

Campo de clave Nombre KLIST

Argumento de bsqueda Argumento de bsqueda Atributos de datos

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

Atributos de datos Multiplicando

Campo de origen Multiplicador

Valor de aparicin

Estructura de datos Nombre de archivo

Valor de aparicin

Comparando

Comparando

*LOCK Campo de destino Nombre de PLIST Dispositivo de programa

Nombre de rea de datos Campo de origen Parmetro

ER

Nombre de archivo Nombre archivo, nombre registro, nombre ventana Nombre de registro

Nombre INFDS Estructura de datos4

ER ER EOF5

READC (E) READE (E N) READP (E N) READPE (E N) Argumento de bsqueda Argumento de bsqueda

ER Estructura de datos4 Estructura de datos4 Estructura de datos4 ER ER ER

EOF5 EOF5 BOF5 BOF5

Nombre archivo, nombre registro Nombre archivo, nombre registro Nombre archivo, nombre registro

574

VisualAge RPG Consulta del lenguaje

Tabla 49. Resumen de especificaciones de cdigo de operacin (continuacin)


Indicadores resultantes 71-72 73-74 75-76 ER Puntero Nombre de estructura, variable, formato registro o ventana ER ER EOF5

Cdigos READS (E) REALLOC (E) RESET (E)

Factor 1

Factor 2 Nombre de subarchivo Longitud

Campo de resultado

*NOKEY

*ALL

RETURN (H M/R) ROLBK (E) SCAN (E) Serie del comparador: longitud

Expresin ER Serie base:inicio Posiciones ms a la izquierda ER FD2

SELECT SETATR (E) SETGT (E) SETLL (E)6 SETOFF1 SETON


1

Nombre de componente Argumento de bsqueda Argumento de bsqueda

Valor de atributo Nombre de archivo Nombre de archivo

atributo NR2 NR2 OF ON

ER ER ER OF ON ER EQ OF ON

SHOWWIN (E) SORTA SQRT (H) START (E)

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

Apndice B. Resumen de cdigos de operacin

575

Tabla 49. Resumen de especificaciones de cdigo de operacin (continuacin)


Indicadores resultantes 71-72 73-74 75-76 ER

Cdigos TEST (E)


8

Factor 1

Factor 2

Campo de resultado Campo de Fecha/Hora o Indicacin de la hora

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

Formato de indicacin de la hora

ER

TESTB1 TESTN1 TESTZ1 TIME UNLOCK (E) Nombre alias

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

WHEN (M/R) WHENxx WRITE (E) Comparando

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

XFOOT (H) XLATE (E P) Z-ADD (H) Z-SUB (H)

ER

Z Z

576

VisualAge RPG Consulta del lenguaje

Tabla 49. Resumen de especificaciones de cdigo de operacin (continuacin)


Indicadores resultantes 71-72 73-74 75-76

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.

Apndice B. Resumen de cdigos de operacin

577

578

VisualAge RPG Consulta del lenguaje

Apndice C. rdenes de clasificacin


En las siguientes tablas figuran los rdenes de clasificacin EBCDIC y ASCII.

Orden de clasificacin EBCDIC


Tabla 50. Orden de clasificacin EBCDIC
Nmero ordinal 65 . 75 76 77 78 79 80 81 . 91 92 93 94 95 96 97 98 . . . , % _ > ? . v : # @ Acento grave Dos puntos Smbolo numrico Arroba 121 122 123 124 79 7A 7B 7C Barra vertical partida Coma Signo de porcentaje Signo de subrayado Signo mayor que Signo de interrogacin inicial 106 107 108 109 110 111 6A 6B 6C 6D 6E 6F . . ! $ * ) ; / Signo de exclamacin Signo del dlar Asterisco Parntesis de cierre Punto y coma NO lgico Menos, guin Barra inclinada 90 91 92 93 94 95 96 97 5A 5B 5C 5D 5E 5F 60 61 . . . < ( + & Signo de centavos Coma, coma decimal Signo menos que Parntesis de apertura Signo ms Barra vertical, OR lgica Smbolo & 74 75 76 77 78 79 80 4A 4B 4C 4D 4E 4F 50 Smbolo Significado Representacin decimal 64 Representacin Hex 40

Espacio

107 108 109 110 111 112 . .

122 123 124 125

Copyright IBM Corp. 1994, 2000

579

Tabla 50. Orden de clasificacin EBCDIC (continuacin)


Nmero ordinal 126 127 128 . . . 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 . { A B C Llave de apertura 192 193 194 195 C0 C1 C2 C3 Vrgula 161 162 163 164 165 166 167 168 169 A1 A2 A3 A4 A5 A6 A7 A8 A9 145 146 147 148 149 150 151 152 153 91 92 93 94 95 96 97 98 99 129 130 131 132 133 134 135 136 137 81 82 83 84 85 86 87 88 89 = " Smbolo Significado Representacin decimal 125 126 127 Representacin Hex 7D 7E 7F

Apstrofo, signo nmero primo Signo igual Comillas

130 131 132 133 134 135 136 137 138 . .

146 147 148 149 150 151 152 153 154 . .

162 163 164 165 166 167 168 169 170 . .

193 194 195 196

580

VisualAge RPG Consulta del lenguaje

Tabla 50. Orden de clasificacin EBCDIC (continuacin)


Nmero ordinal 197 198 199 200 201 202 . . . } J K L M N O P Q R . \ . S T U V W X Y Z . 0 1 2 3 4 5 6 7 8 240 241 242 243 244 245 246 247 248 F0 F1 F2 F3 F4 F5 F6 F7 F8 226 227 228 229 230 231 232 233 E2 E3 E4 E5 E6 E7 E8 E9 Barra inclinada invertida 224 E0 Llave de cierre 208 209 210 211 212 213 214 215 216 217 D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 D E F G H I Smbolo Significado Representacin decimal 196 197 198 199 200 201 Representacin Hex C4 C5 C6 C7 C8 C9

209 210 211 212 213 214 215 216 217 218 . .

225 . .

227 228 229 230 231 232 233 234 . .

241 242 243 244 245 246 247 248 249

Apndice C. rdenes de clasificacin

581

Tabla 50. Orden de clasificacin EBCDIC (continuacin)


Nmero ordinal 250 9 Smbolo Significado Representacin decimal 249 Representacin Hex F9

Orden de clasificacin ASCII


Tabla 51. Orden de clasificacin ASCII
Nmero ordinal 1 . 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 ! " # $ % & ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 . . Espacio Signo de exclamacin Comillas Signo numrico Signo del dlar Signo de porcentaje Smbolo & 32 33 34 35 36 37 38 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 Smbolo Significado Nulo Representacin decimal 0 Representacin Hex 0

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

VisualAge RPG Consulta del lenguaje

Tabla 51. Orden de clasificacin ASCII (continuacin)


Nmero ordinal 59 60 61 62 63 64 : ; < = > ? Smbolo Significado Dos puntos Punto y coma Representacin decimal 58 59 Representacin Hex 3A 3B 3C 3D 3E 3F

Signo menos que 60 Signo igual 61

Signo mayor que 62 Signo de interrogacin inicial Signo arroba comercial 63

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

Corchete de apertura Sesgo inverso Corchete de cierre

91 92 93

Apndice C. rdenes de clasificacin

583

Tabla 51. Orden de clasificacin ASCII (continuacin)


Nmero ordinal 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | _ v 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 { } Llave de apertura Barra vertical partida Llave de cierre Vrgula Smbolo Significado Signo de intercalacin Signo de subrayado Acento grave Representacin decimal 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 Representacin Hex 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E

584

VisualAge RPG Consulta del lenguaje

Apndice D. Valores CCSID soportados


La siguiente lista contiene los valores CCSID soportados en las conversiones desde y a valores UCS-2. No se soporta la conversin entre cdigos CCSID Unicode. Nota: Los cdigos CCSID 932, 936 y 949 se convierten del modo siguiente:
CCSID 932 936 949 037 256 259 273 274 277 278 280 282 284 285 287 290 293 297 300 301 361 363 367 382 383 385 386 387 388 389 391 392 393 394 Se correlaciona con 943 1386 1363 395 420 423 424 437 500 813 819 829 833 834 835 836 837 838 850 851 852 855 856 857 858 860 861 862 863 864 865 866 868 869 870 871 874 875 880 891 895 896 897 903 904 905 907 909 910 912 913 914 915 916 918 919 920 921 922 923 924 927 930 935 937 939 941 942 943 946 947 948 950 951 971 952 955 960 961 963 964 933 949 970 1004 1006 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1025 1026 1027 1028 1038 1040 1041 1042 1043 1046 1047 1050 1051 1088 1089 1092 1097 1098 1112 1114 1115 1116 1117 1118 1119 1122 1123 1124 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1250 1251 1252 1253 1254 1255 1256 1257 1275 1276 1277 1350 1351 1363 1364 1380 1381 1382 1383 1386 1388 4948 4951 4952 4960 5037 5039 5048 5049 5067 5142 5346 5347 5348 5349 5350 5351 5352 5353 5354 5478 8612 9030 9056 9066 9145 28709 33722

Copyright IBM Corp. 1994, 2000

585

586

VisualAge RPG Consulta del lenguaje

Apndice E. Comparacin de los compiladores RPG


El lenguaje VisualAge RPG se basa en el lenguaje RPG IV. Ha sido mejorado de modo que se pueden desarrollar y ejecutar aplicaciones con una interfaz grfica de usuario en un entorno cliente/servidor. En algunos casos algunas funciones no est soportadas para VisualAge RPG. Por ejemplo, no existe ningn ciclo RPG para VisualAge RPG. Puesto que el ciclo RPG no est soportado, todas las funciones asociadas a l como, por ejemplo, las rupturas de control y los campos coincidentes tampoco estn soportadas. A fin de aprovechar el entorno de desarrollo de aplicaciones de la estacin de trabajo, se han aadido funciones a VisualAge RPG (por ejemplo, se utilizan cdigos de operacin como SHOWWIN para visualizar las ventanas de una aplicacin) o bien se han modificado las funciones ILE RPG para AS/400 (por ejemplo, con la directiva de compilador /COPY, puede copiar archivos de AS/400 o archivos de la estacin de trabajo). En este apndice se ofrece un resumen de las diferencias entre ILE RPG para AS/400 y VisualAge RPG.

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 de VisualAge RPG


Los indicadores siguientes estn soportados en VisualAge RPG. Para obtener una lista de los indicadores no soportados por VisualAge RPG, consulte el apartado Indicadores no soportados. Indicadores identificadores de registro 01 - 99, LR Indicadores de campo 01 - 99 Indicadores resultantes 01 - 99, LR

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.

Directivas del compilador


La directiva del compilador /COPY incluye registros de otro archivo. Este archivo puede existir en la estacin de trabajo o en un servidor AS/400. Los registros estn insertados en el lugar donde se produce la sentencia /COPY y se compilan con el programa. Para obtener ms informacin al respecto, consulte /COPY (Posiciones 7-11) en la pgina 9.

Manejo de excepciones y errores


El manejo de errores y excepciones en las aplicaciones de VisualAge RPG incluye el soporte para los componentes lgicos de manejo y la interfaz grfica de usuario de la aplicacin. Para obtener ms informacin consulte el Captulo 4. Trabajar con componentes lgicos en la pgina 29 y el apartado Manejo de errores de evento en la pgina 56.

Datos Tipos de datos y formatos de datos


A continuacin se ofrece un resumen de las diferencias entre los tipos y formatos de datos de ILE RPG para AS/400 y VisualAge RPG. Para obtener una descripcin de los tipos y formatos de datos soportados en VisualAge RPG, consulte el captulo 9, Captulo 9. Tipos de datos y formatos de datos en la pgina 95. Formato binario Los datos binarios se reordenan cuando se utilizan datos entre el servidor y el cliente. Tipo de datos puntero de base La longitud de un campo puntero de base ILE RPG para AS/400 es de 16 bytes y debe estar alineado en lmite de 16 bytes. La longitud de un campo puntero de base de VisualAge RPG es de 4 bytes y debe estar alineado en un lmite de 4 bytes. Formato decimal empaquetado ILE RPG para AS/400 utiliza hexadecimal F para nmeros positivos y hexadecimal D para nmeros negativos. VisualAge RPG utiliza

588

VisualAge RPG Consulta del lenguaje

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.

Literales y constantes con nombre


A continuacin se ofrece una descripcin de las diferencias entre los literales y las constantes con nombre de ILE RPG para AS/400 y VisualAge RPG. Para obtener una descripcin de los tipos y formatos de datos soportados en VisualAge RPG, consulte el Captulo 10. Literales y constantes con nombre en la pgina 139. Literales de grficos Un carcter grfico ILE RPG para AS/400 tiene la forma GoK1K2i donde o e i son los caracteres shift-out y shift-in, respectivamente. Los caracteres shift-out y shift-in no se utilizan con los caracteres de grficos de VisualAge RPG. La forma es GK1K2. Constantes figurativas Las constantes figurativas de ILE RPG para AS/400 pueden utilizar los caracteres shift-out y shift-in, por ejemplo, ALLGoK1K2i. Los caracteres shift-out y shift-in no se utilizan en las constantes figurativas de VisualAge RPG. Estas son las constantes figurativas especficas de VisualAge RPG. Para obtener ms informacin, consulte el apartado Constantes figurativas en la pgina 142.
*ABORT *CANCEL *DARKGREEN *END *INFO *RED *YESBUTTON *BLACK *CYAN *DARKGRAY *GREEN *NOBUTTON *RETRY *WARN *BLUE *DARKBLUE *DARKPINK *HALT *PALEGRAY *START *WHITE *BROWN *DARKCYAN *DARKRED *IGNORE *PINK *YELLOW

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.

Apndice E. Comparacin de los compiladores RPG

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

VisualAge RPG Consulta del lenguaje

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.

Especificaciones de descripcin de archivo


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.

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.

Entradas relacionadas con el ciclo RPG


Puesto que VisualAge RPG no soporta al ciclo RPG, las entradas siguientes no estn soportadas: v Fin de archivo (E) v Secuencia (A y D) v Proceso de lmites (L) v Proceso de desbordamiento (OA-OG, OV o 01-99)

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

VisualAge RPG Consulta del lenguaje

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

Apndice E. Comparacin de los compiladores RPG

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

VisualAge RPG Consulta del lenguaje

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.

Cdigos de operacin similares


Los siguientes cdigos de operacin existen tanto para ILE RPG como para VisualAge RPG. Sin embargo, existen diferencias en la manera de codificar estos cdigos de operacin o bien hay resultados diferentes al ejecutar las aplicaciones que contienen dichos cdigos de operacin. Si desea obtener una descripcin sobre cmo funciona el cdigo de operacin en VisualAge RPG, consulte las cabeceras que aparecen listadas con el cdigo de operacin. v BEGSR ( BEGSR (Empezar subrutina de usuario) en la pgina 400) v CALL ( CALL (Llamar a un programa AS/400) en la pgina 404) v CALLB ( CALLB (Llamar a una funcin) en la pgina 407) v CALLP ( CALLP (Llamar a un procedimiento o programa con prototipo) en la pgina 408) v CHAIN ( CHAIN (Recuperacin aleatoria desde un archivo) en la pgina 414) v CLEAR ( CLEAR (Borrar) en la pgina 422) v CLOSE ( CLOSE (Cerrar archivos) en la pgina 424) v COMMIT ( COMMIT (Comprometer) en la pgina 425) v DEFINE ( DEFINE (Definicin de campo) en la pgina 428) v DELETE ( DELETE (Suprimir registro) en la pgina 431) v DSPLY ( DSPLY (Visualizar ventana de mensaje) en la pgina 441) v FEOD ( FEOD (Forzar fin de datos) en la pgina 453) v READ ( READ (Leer un registro) en la pgina 510) v WRITE ( WRITE (Crear nuevos registros) en la pgina 561)

Cdigos de operacin no soportados


Los siguientes cdigos de operacin no estn soportados en VisualAge RPG: v ACQ v DUMP v EXFMT v FORCE v MHHZO v MHLZO v MLHZO v MLLZO v NEXT v REL v SHTDN

Cdigos de operacin especficos de VisualAge RPG


Los siguiente cdigos de operacin son exclusivos para el lenguaje de VisualAge RPG: v BEGACT/ENDACT (Empezar subrutina de accin, Finalizar subrutina de accin) v CLSWIN (Cerrar ventana) v DSPLY (Visualizar ventana de mensaje)
Apndice E. Comparacin de los compiladores RPG

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.

Conversiones entre CCSID


El compilador VARPG no da soporte a las conversiones entre datos de tipo carcter de un solo byte y datos grficos. Las nicas conversiones soportadas son las siguientes: v De grfico a UCS-2 o bien de UCS-2 a grfico v De carcter a UCS-2 o bien de UCS-2 a carcter v De grfico a grfico (cuando los CCSID son diferentes)

596

VisualAge RPG Consulta del lenguaje

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.

Copyright IBM Corp. 1994, 2000

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

VisualAge RPG Consulta del lenguaje

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

VisualAge RPG Consulta del lenguaje

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

VisualAge RPG Consulta del lenguaje

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

VisualAge RPG Consulta del lenguaje

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

VisualAge RPG Consulta del lenguaje

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

VisualAge RPG Consulta del lenguaje

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

Copyright IBM Corp. 1994, 2000

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

VisualAge RPG Consulta del lenguaje

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:

Copyright IBM Corp. 1994, 2000

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.

Informacin de interfaz de programacin


Esta publicacin documenta la interfaz de programacin de uso general y la informacin de gua asociada que proporciona VisualAge RPG y CODE/400. Esta publicacin pretende ayudarle a crear aplicaciones VisualAge RPG utilizando cdigo fuente RPG IV. Esta publicacin documenta la interfaz de programacin de uso general y la informacin de gua asociada que proporciona el compilador VisualAge RPG. Las interfaces de programacin de uso general permiten a los usuarios escribir programas que obtengan los servicios del compilador VisualAge RPG.

Marcas registradas y marcas de servicio


Los siguientes trminos son marcas registradas de International Business Machines Corporation en Estados Unidos, otros pases o ambos:
Application System/400 CUA DB2/400 IBMLink OS/400 SQL/400 AS/400 DATABASE 2 DB2/6000 ILE PROFS VisualAge Common User Access DB2 IBM Entorno de Lenguajes Integrado SQL/DS 400

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

VisualAge RPG Consulta del lenguaje

ndice Caracteres Especiales


%ABS 313 %ADDR 314 %CHAR 316 %DEC 317 %DECPOS 318 %DECH 318 %DIV 319 %EDITC 319 %EDITFLT 321 %EDITW 322 %ELEM 322 %EOF 323 %EQUAL 324 %ERROR 325 / EXEC SQL BEGIN DECLARE 77 / EXEC SQL INCLUDE SQLCA 75 / EXEC SQL WHENEVER 76 %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 *ABORT 142, 589 *ALL 301 *ALLx.. 142 *ALLGK1K2 142 *ALLUXxxxYyyy 142 *ALLXx1.. 142 *BLACK 142, 589 *BLANK/*BLANKS 142 *BLUE 142, 589 *BROWN 142, 589 *CANCEL 142, 589 *CANCL 44, 56 /COPY, sentencia 9 *CYAN 142, 589 *CYMD, formato 114 *DARKBLUE 142, 589 *DARKCYAN 142, 589 *DARKGRAY 142, 589 Copyright IBM Corp. 1994, 2000 *DARKGREEN 142, 589 *DARKPINK 142, 589 *DARKRED 142, 589 *DATE 294, 295 *DAY 294, 295 *DEFAULT 44, 56 /DEFINE 11 *DTAARA DEFINE 589 /EJECT 14 /ELSE 13 /ELSEIF, expresin de la condicin 12 *END 589 *ENDAPPL 44, 56 *ENDCOMP 44, 56 /ENDIF 13 *ENTER 142, 589 /EOF 14 /EOF, consejos directiva /EOF 14 *GREEN 142, 589 *HALT 142, 589 *HIVAL 142 /IF, expresin de la condicin 12 *IGNORE 142, 589 *IN 25, 294, 296 *IN(xx) 294, 296 *INFO 142, 589 *INIT 49 *INxx 25, 294, 296 *INZSR 29, 187 *LONGJUL, formato 114 *LOVAL 142 *MONTH 294, 295 *NOBUTTON 142, 589 *NODEFAULT 44, 56 *NULL 142 *OK 142 *ON/*OFF 142 *PALEGRAY 142, 589 *PARMS 48 *PINK 142, 589 *PLACE 294, 295, 302 *PROC 48 *PSSR 32, 54, 56 *RED 142, 589 *RETRY 142, 589 *ROUTINE 48, 49 /SPACE 14 *START 589 *STATUS 48 *TERM 49 *TERMSR 32 /TITLE 15 /UNDEFINE 11 *WARN 142, 589 *WHITE 142, 589 *YEAR 294, 295 *YELLOW 142, 589 *YESBUTTON 142, 589 *ZERO/*ZEROS 142

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

VisualAge RPG Consulta del lenguaje

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

VisualAge RPG Consulta del lenguaje

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

VisualAge RPG Consulta del lenguaje

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

VisualAge RPG Consulta del lenguaje

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

punteros de base 98 alineacin de subcampos

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

VisualAge RPG Consulta del lenguaje

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

UPDATE, cdigo de operacin 380, 558

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

VisualAge RPG Consulta del lenguaje

Nmero de Programa: 5769-CL3

Printed in Denmark by IBM Danmark A/S

SC10-3066-03

Potrebbero piacerti anche