Articulo de referencia

IBM RPG II

RPG II es una versión muy temprana y popular del lenguaje de programación IBM RPG . Fue desarrollado a finales de los años 1960 y diseñado para funcionar en los sistemas IBM más...

RPG II es una versión muy temprana y popular del lenguaje de programación IBM RPG .

Fue desarrollado a finales de los años 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 y System/36 . También estaba disponible para las series de mainframes System/370 , The Singer System 10 , Sperry Univac 90/25, 90/30, 90/40, System 80 y 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 su serie de computadoras B1700 . Digital Equipment Corporation tenía su propia implementación llamada VAX RPG II para sistemas VAX/VMS . [2]

Una versión mejorada del RPG III apareció en 1978.

Tiene una serie de características inusuales, entre ellas: 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 las ubicaciones exactas de las columnas para generar resultados correctos. Hay ocho tipos de especificaciones diferentes y se utilizan formas de codificación independientes para escribir cada una de ellas, 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 o apagado, a partir de un conjunto de variables lógicas numeradas del 01 al 99 para fines 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 una instrucción explícita 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 una lógica fija.

El concepto de ciclo de programación de RPG encajaba perfectamente con una máquina cíclica que leía cartas, resumía su contenido e imprimía un resultado, como una máquina tabuladora . El lenguaje se amplió para manejar otros dispositivos de entrada y salida y proporciona un método rápido y eficiente de programación.

Los 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 incorporar el ciclo de "Último registro" de RPG de lógica fija, el indicador LR se puede activar con una instrucción SETON. LR no se puede desactivar.

RPG II no evolucionó mucho desde la implementación de 1977 en el System/34 hasta el año 2000, cuando se suspendió la comercialización del Advanced/36 . Los cambios que se realizaron a partir de la versión de los años 70 incluyeron la agrupación IFEQ/IFNE/IFGT/IFGE/IFLT/IFLE y END. Además, el call/parm para poder llamar a subrutinas externas. Otro cambio fue que, para las subrutinas internas, ya no era necesario poner SR en las columnas 7 y 8 de las especificaciones C (cálculo).

Los proveedores de terceros vendían más de 200 subrutinas de ensamblador diferentes que podían ser utilizadas por los programadores de System/36 y Advanced/36 para superar las limitaciones de RPG II. Algunas de las limitaciones de RPG II en System/3, 32, 34 y 36, incluido Advanced/36, eran el límite de 64K y la cantidad de archivos que se podían tener en un programa. Por lo tanto, si se tenían muchas líneas de programación o matrices grandes, era fácil superar los 64.000 bytes de código objeto. Sin embargo, cuando RPG II se ejecutaba en AS/400 y sus sucesores iseries e IBM i (aquellos que ejecutaban OS/400 o i5/OS en lo que se denomina S/36E (entorno de ejecución)), esos límites (los 64K bytes y la cantidad de archivos) se ampliaron en gran medida o se eliminaron.

Especificaciones del RPGII

En la implementación System/36 de RPG II, hay ocho tipos de especificaciones (spec) diferentes, es decir, una línea de texto de formato fijo, de 80 caracteres (bytes) de longitud, derivada del uso original de entrada de tarjeta perforada para sistemas IBM anteriores, como el System/3 . Las especificaciones similares se agrupaban y cada tipo debía estar en un orden específico: U , T , H , F , E , L , I , C y O.

Los códigos de especificación aparecen en la columna 6 de una especificación RPG-II:

Los códigos de operación aparecen en las columnas 28 a 32 de una especificación de cálculo RPG-II.

  1. CALL/PARM se agregó a RPG II con la versión 6.0 (también conocida como VASP).

CADENA 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 del archivo nombrado en el Factor 2 se posicione en la ubicación especificada por el valor en el 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 lo mueve al campo de resultado.

XFOOT hace que se sume una matriz y el resultado se mueva al campo de resultado.

MVR debe seguir a 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, son "banderas" o tipos de datos booleanos .

  • Genérico, generalmente configurado manualmente, para uso personalizado dentro de las especificaciones de E , C y O de un programa:
     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 detención, configurados manualmente dentro de las especificaciones de cálculo C , para finalizar un programa con un código de retorno:
H1H2H3H4H5H6H7H8H9
  • Indicadores de coincidencia, asignados a campos de entrada I -spec, se configuran automáticamente al leer registros de un archivo, para coordinar la jerarquía y señalar qué campos (variables) dentro de los registros de dos o más archivos están sincronizados, asumiendo un orden ordenado de los registros dentro de cada archivo, y los registros se procesan secuencialmente:
M1 M2 M3 M4 M5 M6 M7 M8 M9, y MRque refleja que se ha producido la coincidencia
  • Indicadores de nivel de control, asignados a los campos de entrada I -spec, para coordinar la jerarquía y señalar qué campos dentro de un registro de un archivo están agrupados, asumiendo un orden ordenado de los registros dentro de un archivo, y los registros se procesan secuencialmente:
L0 L1 L2 L3 L4 L5 L6 L7 L8 L9
  • Indicadores de teclas de comando, para señalar al programa que está procesando la entrada desde un teclado de estación de trabajo, equivalentes a las teclas de función ( F1-F12, y shift-F1-F12) en un teclado de PC, utilizadas en lugar de la Entertecla:
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 ningún KOindicador.
  • Indicador de primer ciclo, se configura automáticamente al imprimir la primera página, se utiliza principalmente para archivos de impresora y se utiliza de manera similar a un indicador de desbordamiento para controlar la salida, como saltos de página y encabezados:
1P
  • Indicadores de desbordamiento, que se activan automáticamente al procesar los límites de paginación de un archivo de salida de impresora, según el contador de línea L -spec de cada archivo, y también se pueden configurar manualmente. Por lo general, establecen saltos de página e impresión de encabezados. Un indicador por cada uno, para hasta 8 archivos de salida:
OA OB OC OD OE DE OG OV
  • El indicador de último registro, que no debe confundirse con los indicadores de nivel de control, finaliza un programa, para devolver el control al flujo de trabajo de procesamiento por lotes (script), se configura automáticamente cuando se alcanza el final del archivo en un archivo procesado secuencialmente, se configura manualmente para finalizar un programa que no tiene una fuente de proceso secuencial (archivo):
LR
  • Indicadores externos, genéricos para uso personalizado, pasados ​​al programa desde el archivo por lotes de control del flujo de trabajo (script):
U1U2U3U4U5U6U7U8

Se disponía de hojas plegables, plantillas, revestidas de plástico contra el desgaste y las manchas, que resumían las distintas especificaciones. Se utilizaban para la inspección visual y la verificación del texto del código fuente de formato fijo cuando se comparaba con su salida impresa. Coincidían y se alineaban con el espaciado estándar del texto de la época, tal como se extraía del uso original de las tarjetas perforadas :

Código de muestra

     F***************************************************************
     F* ESTE PROGRAMA LEE EL CONTENIDO DE UN ARCHIVO DE ENCABEZADO DE FACTURA   
     F* E IMPRIME LAS FACTURAS PROCESADAS PARA LA FECHA ESTABLECIDA EN LA   
     F* ÁREA DE DATOS LOCALES. EXISTEN RUPTURAS DE NIVEL Y TOTALES PARA      
     A LA MIERDA CON CADA TIENDA.                                                 
     F***************************************************************
     F*
     DISCO FINVHDR IP F 62
     IMPRESORA DE 132 DE IMPRESORA
     IINVHDR NS 01 1NC
     Yo 1 3 TIENDA L1
     I 4 13 INVNO
     I 14 20 NÚMERO PERSONALIZADO
     Yo 21 45 STNAM
     Yo 46 53 INVDAT
     Yo 54 622TOTINV
     Yo UDS
     Yo 1 8 RPTDAT
     C 01 INVDAT COMP RPTDAT 11
     C 01 11 AGREGAR ATINV L1TOT 92
     C 01 11 AGREGAR ATINV LRTOT 92
     IMPRESORA H 101 1P
     O O DE
     O PAGINA Z 106
     O 102 'PAGINA'
     O 59 'MUY GRANDE'
     O 72 'TIENDAS, INC.'
     FECHA DE ÚLTIMA HORA 17
     O 8 'FECHA DE EJECUCIÓN'
     OH11P
     O O DE
     O 73 'VENTAS DIARIAS POR TIENDA'
     OH21P
     O O DE
     ORPTDAT 83
     O 63 'PARA LA FECHA:'
     OH11P
     O O DE
     O 6 'TIENDA'
     O 18 'FACTURA'
     O 28 'CLIENTE'
     O 58 'CLIENTE'
     O 78 'FACTURA'
     OH21P
     O O DE
     O 6 'NÚMERO'
     O 18 'NÚMERO'
     O 28 'NÚMERO'
     O 58 'NOMBRE'
     O 78 'TOTAL'
     Sobredosis 0 L1
     O TIENDA 6
     Día de la Independencia 1 01 11
     El número de inscripción 18
     EL CUSTNO 28
     El pilar 58
     El TOTINV1B 78
     OT 1 L1
     O 45 'TOTAL DE LA TIENDA...'
     O L1TOT 1B 78
     OT 1 LR
     O 45 'GRAN TOTAL...'
     El LRTOT 1 78

Referencias

  1. ^ "Sistema Sperry Univac 1100/60" (PDF) . Consultado el 18 de enero de 2021 .
  2. ^ "Manual de herramientas y lenguaje de software VAX/VMS" (PDF) . bitsavers.org . 1985 . Consultado el 31 de diciembre de 2020 .
  3. ^ abc "Plantilla de depuración de IBM RPG", Museo de Historia de la Computación
  4. ^ "Compiladores RPG II de IBM System/3 Modelo 8, Modelo 10, Modelo 12 y Modelo 15", Especificaciones de productos de programas de IBM, noviembre de 1977, pág. 3
  • Guía del usuario y referencia del sistema/36-Compatible RPG II
  • Wiki de rango medio
Obtenido de "https://es.wikipedia.org/w/index.php?title=IBM_RPG_II&oldid=1169773633"