RPG II es una versión muy temprana y popular del lenguaje de programación IBM RPG .
Fue desarrollado a fines de la década de 1960 y diseñado para funcionar en los sistemas IBM más pequeños de la época, como IBM 1130 , IBM System / 3 , System / 32 , System / 34 , System / 36 . Sin embargo, también estaba disponible para las series de mainframe System / 370 , Singer System 10 , Sperry Univac 90/25, 90/30, 90/40, System 80, 1100 [1] y Wang VS Series. ICL produjo versiones para su sistema ICL 2903 y para VME / K ; y Burroughs Corporation produjo un compilador RPG II con extensiones de base de datos para suSerie B1700 de computadoras. Digital Equipment Corporation tenía su propia implementación llamada VAX RPG II para sistemas VAX / VMS . [2]
Una versión mejorada RPG III apareció en 1978.
Tiene una serie de características inusuales, que incluyen: un bucle de procesamiento implícito; y que es un lenguaje de programación de formato fijo, por lo que los programas son difíciles de leer sin una plantilla de depuración especial. [3]
Características
RPG II es un lenguaje de programación de formato fijo, lo que significa que el código debe colocarse en ubicaciones de columna exactas para generar resultados correctos. Hay ocho tipos de especificación diferentes, y se utilizan formularios de codificación separados para escribir cada uno, y se utiliza una plantilla de depuración especial [3] como ayuda para leer las impresiones del programa.
Cada programa RPG II se ejecuta dentro de un bucle implícito, el ciclo del programa , que aplica el programa sucesivamente a cada registro de un archivo; esto se documenta mediante un diagrama de "flujo lógico" en la plantilla de depuración. [3] Cada registro (tarjeta perforada individual) se compararía con cada línea del programa, que actuaría sobre el registro, o no, en función de si esa línea tenía un "indicador" encendido "encendido" o "apagado" - desde un conjunto de variables lógicas numeradas del 01 al 99 para propósitos definidos por el usuario, u otros conjuntos más pequeños basados en funciones de procesamiento de registros, campos o informes. Las variables especiales, como UDATE, UYEAR, PAGE, etc., se completan cuando comienza el programa o cuando se produce un desbordamiento de página, aunque no haya instrucciones explícitas para estas actividades. Los cálculos totales y la salida se realizan en "tiempo total", después del ciclo de detalle cuando L1 / LR se ha activado mediante lógica fija.
El concepto de ciclo de programa de RPG encaja perfectamente con una máquina cíclica que lee tarjetas, resume su contenido e imprime un resultado, como una máquina tabuladora . El lenguaje se amplió para manejar otros dispositivos de entrada y salida y proporciona un método de programación rápido y eficiente.
Dispositivos como la estación de trabajo (WORKSTN), el teclado (KEYBORD) o la consola (CONSOLE) no tienen un número fijo de registros al inicio del trabajo y por lo tanto, para poder incorporar el RPG de lógica fija "Last Record "ciclo, el indicador LR se puede activar con una instrucción SETON. LR no se puede activar.
RPG II no evolucionó mucho desde la implementación de 1977 en el System / 34 hasta 2000 cuando el Advanced / 36 se descontinuó de la comercialización. Los cambios que se hicieron a partir de la versión de 1970 incluyeron la agrupación IFEQ / IFNE / IFGT / IFGE / IFLT / IFLE y END. Además, la llamada / parm para poder llamar a subrutinas externas. Otro cambio fue que para las subrutinas internas, ya no tenía que poner SR en las columnas 7 y 8 de las especificaciones C (cálculo).
Los proveedores externos vendieron más de 200 subrutinas de ensamblador diferentes que los programadores de System / 36 y Advanced / 36 podrían utilizar para superar las limitaciones de RPG II. Algunas de las limitaciones de RPG II en System / 3, 32, 34 y 36, incluido el Advanced / 36, fue el límite de 64K y la cantidad de archivos que podría tener en un programa. Entonces, si tenía muchas líneas de programación o arreglos grandes, era fácil exceder los 64,000 bytes de código objeto. Sin embargo, RPG II ejecutándose en el AS / 400 y sus siguientes iseries e IBM i (aquellos que ejecutan OS / 400 o i5 / OS en lo que se llama S / 36E (entorno de ejecución)) esos límites (los 64K bytes y el número de archivos) fueron ampliados o eliminados en gran medida.
Especificaciones de RPGII
En la popular implementación System / 36 de RPG II, hay 8 tipos de especificación diferentes:
- U - La especificación de informe automático solo se requiere para los programas de informe automático.
- H : la especificación de encabezado se encuentra en la parte superior del programa y describe las opciones del compilador, como el tamaño máximo de compilación, si el programa es un programa MRT (Terminal de solicitante múltiple) y qué tipo de listado se genera cuando se compila el programa. El nombre de objeto del programa creado se encuentra en las columnas 75–80; si una fuente no tiene una especificación H, se usa el nombre RPGOBJ.
- F - Las especificaciones de archivo son las siguientes y describen los archivos utilizados en el programa. Los archivos pueden ser archivos de disco (DISK) o pueden ser dispositivos como una impresora (PRINTER), la estación de trabajo (WORKSTN), el teclado (KEYBORD), la pantalla sin formato (CRT o DISPLAY) o definida por el usuario (SPECIAL). Se describen el tamaño del registro, el tamaño del bloque, los indicadores de desbordamiento y los indicadores externos. Es posible que un programa de RPG no utilice ninguna especificación F.
- E - Las especificaciones de extensión son las siguientes, y describen matrices y tablas, que pueden ser obtenidas previamente de archivos de disco (una tabla de entrada), extraídas de constantes colocadas al final de la fuente entre símbolos ** y / *, o construidas a partir de cálculos.
- Las especificaciones del contador de línea L son las siguientes y, si están presentes, describa el formulario que se imprimirá. Define el número de líneas en una página y las posiciones donde comienza y termina la impresión.
- I - Las especificaciones de entrada son las siguientes y describen las áreas de datos dentro de los archivos. RPG II permite la redefinición de áreas de datos para que un campo llamado FLDA pueda ocupar la misma área que una matriz AR que contiene 8 elementos de 1 carácter cada uno. Se pueden describir áreas sin registro, como estructuras de datos. Dependiendo de los valores del registro de entrada, los indicadores pueden estar condicionados.
- C - Las especificaciones de cálculo son las siguientes. Los campos totales pueden describirse y acumularse. Son posibles cálculos complejos y manipulaciones de cadenas. Los indicadores pueden estar condicionados.
- O - Especificaciones de salida, que describen el registro de salida en términos de campos y posiciones de salida.
Un noveno se añadió más tarde en 1977: [4]
- T - Telecomunicaciones
Los códigos de operación aparecen en las columnas 28 a 32 de una especificación de cálculo de RPG-II.
Código de operación | Nombre |
---|---|
AGREGAR | Agregar |
SUB | Sustraer |
MULT | Multiplicar |
DIV | Dividir |
Z-AÑADIR | Cero y sumar |
Z-SUB | Cero y resta |
MVR | Mover el resto |
MOVERSE | Moverse |
MOVIL | Mover hacia la izquierda |
MHLZO | Mover zona alta a baja |
MLHZO | Mover de baja a alta zona |
MLLZO | Mover de zona baja a zona baja |
MHHZO | Mover alto a zona alta |
BITON | Bit en |
UN POCO DE | Poco fuera |
TESTB | Bit de prueba |
IR | Ir |
ETIQUETA | Etiqueta (destino de un GOTO) |
EXSR | Ejecutar subrutina |
BEGSR | Comenzar subrutina |
ENDSR | Subrutina final |
ENCENDER | Encender |
SETOF | Activar |
EXCPT | Excepción |
SALIDA | Salida |
RLABL | Redefinir etiqueta |
ULABL | Etiqueta de usuario |
LLAME 1 | Llamada |
PARM 1 | Parámetro |
CADENA | Cadena |
LEER | Leer |
LEER | Leer igual |
LEER | Leer anterior |
REDPE | Leer igual anterior |
SETLL | Establecer límites inferiores |
COLOCAR | Colocar |
HORA | Hora del día (000000-235959) |
DSPLY | Monitor |
SORTA | Ordenar matriz |
XFOOT | Crossfoot |
MUEVE UN | Mover matriz |
LOKUP | Búsqueda (buscar en matriz) |
- CALL / PARM se agregó a RPG II con la versión 6.0 (también conocida como VASP).
CHAIN recupera el registro en el archivo indexado nombrado en el Factor 2 que coincide con la clave exacta especificada por el valor en el Factor 1.
SETLL hace que el puntero de índice para el archivo nombrado en Factor 2 se coloque en la ubicación especificada por el valor en Factor 1.
SORTA hace que la matriz nombrada se ordene en su lugar; es decir, los elementos aparecen en orden.
Z-SUB calcula el factor 2 con signo opuesto y se traslada al campo de resultados.
XFOOT hace que se sume una matriz y el resultado se mueva al campo de resultados.
MVR debe seguir una operación DIV. El resto entero de la operación DIV se coloca en el campo de resultado. MVR después de la operación DIV para "56 dividido por 3" colocaría el valor 2 en el campo de resultado.
Indicadores
Los indicadores están 'establecidos' o no, por lo que son efectivamente una serie incorporada de "banderas" o tipos de datos booleanos .
- Estándar:
- 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19
- 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
- 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
- 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
- 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
- Indicadores de parada:
- H1 H2 H3 H4 H5 H6 H7 H8 H9
- Indicadores coincidentes:
- M1 M2 M3 M4 M5 M6 M7 M8 M9 Señor
- Indicadores de nivel de control:
- L0 L1 L2 L3 L4 L5 L6 L7 L8 L9
- Indicadores de teclas de comando:
- KA KB KC KD KE KF KG KH KI KJ KK KL KM KN KP KQ KR KS KT KU KV KW KX KY
- Estos indicadores se refieren a las teclas de comando 1 a 24, en ese orden. Tenga en cuenta que no hay indicador de KO.
- Indicador de primer ciclo (primera página, utilizada principalmente para archivos de impresora):
- 1P
- Indicador de último registro:
- LR
- Indicadores de desbordamiento:
- OA OB OC OD OE DE OG OV
- Indicadores externos:
- U1 U2 U3 U4 U5 U6 U7 U8
3 | H |
5 | F / archivos |
6 | F / extensiones |
7 | mi |
8 | L |
10 | I / encabezado |
11 | I / campos |
12 | C |
13 | O / encabezado |
14 | O / campos |
Código de muestra
F************************************************* ************** F * ESTE PROGRAMA LEE EL CONTENIDO DE UN ARCHIVO DE ENCABEZADO DE FACTURAS F * E IMPRIME LAS FACTURAS PROCESADAS PARA LA FECHA ESTABLECIDA EN EL F * AREA DE DATOS LOCALES. HAY ROTURAS DE NIVEL Y TOTALES PARA F * CADA TIENDA. F************************************************* ************** F* DISCO FINVHDR IP F 62 IMPRESORA DE 132 DE IMPRESORA IINVHDR NS 01 1NC I 1 3 TIENDA L1 I 4 13 INVNO I 14 20 CUSTNO I 21 45 STNAM I 46 53 INVDAT I 54 622TOTINV Yo UDS I 1 8 RPTDAT C 01 INVDAT COMP RPTDAT 11 C 01 11 AÑADIR TOTINV L1TOT 92 C 01 11 AÑADIR TOTINV LRTOT 92 IMPRESORA H 101 1P O O DE O PÁGINA Z 106 O 102 'PÁGINA' O 59 'MUY GRANDE' O 72 'TIENDAS, INC.' FECHA 17 O 8 'FECHA DE EJECUCIÓN' OH 1 1P O O DE O 73 'VENTA DIARIA POR TIENDA' OH 2 1P O O DE O RPTDAT 83 O 63 'PARA LA FECHA:' OH 1 1P O O DE O 6 'TIENDA' O 18 'FACTURA' O 28 'CLIENTE' O 58 'CLIENTE' O 78 'FACTURA' OH 2 1P O O DE O 6 'NÚMERO' O 18 'NÚMERO' O 28 'NÚMERO' O 58 'NOMBRE' O 78 'TOTAL' OD 0 L1 O TIENDA 6 OD 1 01 11 O INVNO 18 O CUSTNO 28 O STNAM 58 O TOTINV1B 78 OT 1 L1 O 45 'TIENDA TOTAL ...' O L1TOT 1B 78 OT 1 LR O 45 'GRAN TOTAL ...' O LRTOT 1 78
Referencias
- ^ "Sistema Sperry Univac 1100/60" (PDF) . Consultado el 18 de enero de 2021 .
- ^ "Manual de herramientas y lenguaje del software VAX / VMS" (PDF) . bitsavers.org . 1985 . Consultado el 31 de diciembre de 2020 .
- ^ a b c "Plantilla de depuración de IBM RPG" , Museo de Historia de la Computación
- ^ "IBM System / 3 Model 8, Model 10, Model 12 y Model 15 RPG II Compilers" , Especificaciones de producto del programa IBM, noviembre de 1977, p. 3