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]
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.
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.
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.
Los indicadores están 'establecidos' o no, son "banderas" o tipos de datos booleanos .
MR
que refleja que se ha producido la coincidenciaF1-F12
, y shift-F1-F12
) en un teclado de PC, utilizadas en lugar de la Enter
tecla:KO
indicador.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 :
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