AWS El servicio de modernización de mainframes (experiencia en entornos de ejecución gestionados) ya no está abierto a nuevos clientes. Para obtener prestaciones similares a las del Servicio de Modernización de AWS Mainframe (experiencia en entornos de ejecución gestionados), explore el Servicio de Modernización de AWS Mainframe (experiencia autogestionada). Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte Cambio en la disponibilidad de la modernización del AWS mainframe.
Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Otros/Utilidades misceláneas
Esta sección cubre varios programas de utilidades, con diversos propósitos, que no se pudieron adjuntar a las categorías existentes
En los párrafos siguientes, PICTURE debe entenderse como la PICTURE palabra clave COBOL, utilizada para describir los tipos y formatos de datos de los campos.
CBL_ _NOT AND/CBL_OR/CBL_XOR/CBL_EQ/CBL_IMP/CBL
Finalidad
Esto se refiere al soporte de operaciones lógicas bit a bit en elementos de datos, que se encuentra en algunos dialectos de COBOL (Micro Focus). Tenga en cuenta que la refactorización automática con AWS Transform gestiona la transformación de los usos de los operadores bit a bit del dialecto MF de Cobol a Java (consulte los ejemplos de usos a continuación). Para que el código modernizado se ejecute correctamente, habrá que implementar simultáneamente la aplicación de utilidad.
Operadores compatibles:
Operador unitario:
| Operador unario | details |
|---|---|
CBL_NOT |
Complemento bit a bit (~target) |
Operadores binarios:
| Operadores binarios | details |
|---|---|
CBL_AND |
AND a nivel de bits (origen y destino) |
CBL_OR |
O bit a bit (fuente | destino) |
CBL_XOR |
O exclusivo bit a bit (fuente ^ destino) |
CBL_EQ |
Equivalencia bit a bit (~ (fuente ^ destino)) |
CBL_IMP |
Implicación bit a bit (~fuente | destino) |
Signature
Además de CBL_NOT, que solo tiene un operando (objetivo), todas las demás operaciones tienen al menos dos operandos, que son elementos de datos. El primer operando es el origen, el segundo es el destino. Un argumento opcional adicional (longitud) indica el número de bytes que se van a procesar (de izquierda a derecha). Si se omite la longitud, se establece de forma predeterminada el tamaño mínimo de origen y destino (en bytes). El resultado de la operación se almacena en el destino. El código de retorno del programa es 0 (a menos que se produzca una excepción).
Control de comprobaciones o errores
Para cada operador disponible, se comprueba el número de argumentos necesarios. Si no se cumple el número mínimo de argumentos requeridos, se
IllegalArgumentExceptionlanzará uno.Se comprueba la positividad del argumento de longitud entera opcional. Si la longitud proporcionada es negativa, se mostrará un mensaje en los registros y no se aplicará el operador.
Ejemplo de uso
Ejemplo de operador unitario:
Este es un uso de CBL_NOT en cobol:
* TARGET: 00000101 * OPERATION: NOT * EXPECTED: 11111010 = 64000 dec (2nd byte unchanged - all 0) MOVE X'0500' to TARGET CALL "CBL_NOT" USING TARGET BY VALUE 1.
y la correspondiente modernización de Java:
/* TARGET: 00000101 OPERATION: NOT EXPECTED: 11111010 = 64000 dec (2nd byte unchanged - all 0) */ ctx.getTarget().getTargetReference().setBytes(new byte[]{ 5, 0 }); ctrl.callSubProgram("CBL_NOT", CallBuilder.newInstance() .byReference(ctx.getTarget().getTargetReference()) .byValue(1) .getArguments(), ctx);
Ejemplo de operador binario:
Véase, por ejemplo, el siguiente código COBOL con CBL_AND:
* SOURCE: 00000011 * OPERATION: AND * TARGET: 00000101 * EXPECTED: 00000001 = 256 dec (2nd byte unchanged - all 0) MOVE X'0300' to SRC MOVE X'0500' to TARGET CALL "CBL_AND" USING SRC TARGET BY VALUE 1.
y su modernización de Java:
/* SOURCE: 00000011 OPERATION: AND TARGET: 00000101 EXPECTED: 00000001 = 256 dec (2nd byte unchanged - all 0) */ ctx.getSrc().getSrcReference().setBytes(new byte[]{ 3, 0 }); ctx.getTarget().getTargetReference().setBytes(new byte[]{ 5, 0 }); ctrl.callSubProgram("CBL_AND", CallBuilder.newInstance() .byReference(ctx.getSrc().getSrcReference()) .byReference(ctx.getTarget().getTargetReference()) .byValue(1) .getArguments(), ctx);
CEE3Y
Finalidad
Este programa de utilidad imita el comportamiento del programa anterior con el mismo nombre, cuya función es terminar un programa con un código Abend (final anormal) y un tiempo de limpieza opcional. El motor de transformación de AWS gestiona la modernización automática de las llamadas a CEE3 ABD. Para que el código modernizado se ejecute correctamente, habrá que implementar simultáneamente la aplicación de utilidad.
El programa detiene la unidad de ejecución actual mediante el código abend proporcionado. Se imprime un mensaje informativo en los registros, en el que se especifica que se ha llamado a una salida de usuario con el código indicado. Por ahora, el parámetro de temporización NO se tiene en cuenta, pero está presente como argumento por motivos de compatibilidad con la modernización.
Signature
El programa acepta 0 o 2 argumentos. Los dos argumentos son:
El código Abend (un elemento de datos que debe interpretarse como un valor entero positivo)
Se ignora el tiempo de limpieza (un elemento de datos que debe interpretarse como un valor entero positivo)
Si no se proporciona ningún argumento, se utilizan los siguientes valores predeterminados:
Código de plegado: 0
Tiempo de limpieza: 0
Comprobaciones/manejo de errores
Comprueba que se están proporcionando 0 o 2 argumentos; de lo contrario, se
IllegalArgumentExceptiongenerará un.Si se proporcionan dos argumentos, compruebe que: el código abend esté entre 0 y 4095 (ambos incluidos); el tiempo esté entre 0 y 5 (ambos incluidos)
Si no se cumplen estas pruebas, se activará un. IllegalArgumentException
Ejemplo de uso
A continuación, se muestra un ejemplo de uso en un programa COBOL, de la aplicación Carddemo:
9999-ABEND-PROGRAM. DISPLAY 'ABENDING PROGRAM' MOVE 0 TO TIMING MOVE 999 TO ABCODE CALL 'CEE3ABD'.
y el correspondiente código java modernizado:
public void _9999AbendProgram(final Cbtrn03cContext ctx, final ExecutionController ctrl) { DisplayUtils.display(ctx, ctrl, LOGGER, "ABENDING PROGRAM"); ctx.getTiming().setTiming(0); ctx.getAbcode().setAbcode(999); ctrl.callSubProgram("CEE3ABD", CallBuilder.newInstance() .getArguments(), ctx); }
CREAR
Finalidad
La utilidad CEEDATE convierte un número que representa una fecha de Lilian (días transcurridos desde el 15 de octubre de 1582) en una representación de fecha basada en caracteres, utilizando un formato proporcionado.
Imita el comportamiento de la antigua utilidad del sistema con el mismo nombre.
Signature
Dada su naturaleza, la utilidad CEEDATE está destinada más bien a ser llamada desde programas.
Se necesitan tres o cuatro argumentos (el último argumento es opcional):
El primer argumento obligatorio es un elemento de datos numéricos cuyo valor se interpretará como una fecha de Lilian
El segundo argumento obligatorio es un elemento de datos alfanumérico que contiene la
PICTUREcadena utilizada para la conversión de la fecha a caracteresEl tercer argumento obligatorio es el elemento de datos alfanuméricos de destino, que contiene el resultado de la conversión del primer argumento al segundo como
PICTUREEl cuarto argumento opcional es un elemento de datos que se utiliza para almacenar el código de respuesta de la utilidad
Control de comprobaciones y errores
Si el número de argumentos que se pasan a la utilidad no es tres o cuatro, se
BluageWrapperExceptionlanzará unSi el primer argumento numérico proporcionado no se puede evaluar correctamente como una fecha de Lilian (fuera de los límites), se registrará un mensaje de error. El titular del código de valoración opcional, si está presente, recibirá un código de valoración de gravedad 3 y un mensaje número 2512
Si se produce una excepción durante la conversión de fecha debido a que se ha proporcionado un mensaje de error no válido
PICTURE, se registrará un mensaje de error. El titular del código de valoración opcional, si está presente, recibirá un código de valoración de gravedad 3 y un mensaje número 2518Si, por alguna razón, la conversión no puede realizarse correctamente, el elemento de datos de salida se rellenará con espacios en blanco
Si la conversión se ha realizado correctamente, el titular del código de valoración opcional recibirá un código de valoración de gravedad 0 (y ningún mensaje)
Ejemplo de uso
Este es un ejemplo de llamada de un programa COBOL (la estructura del soporte del código de retroalimentación FC contiene puntos suspensivos, ya que contiene cientos de entradas de condiciones (nivel 88) que no se muestran aquí):
WORKING-STORAGE SECTION. 01 LILIANS PIC S9(9) BINARY. 01 TIMESTAMP-OUT PIC X(80). 01 MASK. 05 MASK-LEN PIC S9(4) BINARY. 05 MASK-STR. 10 MASK-CHR PIC X OCCURS 0 TO 256 DEPENDING ON MASK-LEN. 01 ROUTINE-NAMES. 05 CEESECS-ROUTINE PIC X(08) VALUE 'CEESECS '. 05 CEELOCT-ROUTINE PIC X(08) VALUE 'CEELOCT '. 05 CEEDATE-ROUTINE PIC X(08) VALUE 'CEEDATE '. 01 FC. ... * lilian date for 4 June 1990 MOVE SPACES TO MASK-STR MOVE 148887 TO LILIANS. MOVE 23 TO MASK-LEN MOVE 'YYYY-MM-DD-HH:MI:SS.999' TO MASK-STR CALL CEEDATE-ROUTINE USING LILIANS MASK TIMESTAMP-OUT FC.
CELOCT
Finalidad
La utilidad CEELOCT se utiliza para devolver el local date/time en tres formatos:
Fecha de Lilian (el número de días transcurridos desde el 14 de octubre de 1582)
Los segundos de Lilian (el número de segundos transcurridos desde las 00:00:00 del 14 de octubre de 1582)
Cadena de caracteres gregorianos (en la forma)
YYYYMMDDHHMISS999
Imita el comportamiento de la utilidad del sistema anterior con el mismo nombre.
Signature
Dada su naturaleza, la utilidad CEELOCT está destinada más bien a ser llamada desde programas.
Se necesitan tres o cuatro argumentos (el último argumento es opcional):
El primer argumento obligatorio es un elemento de datos que se utiliza para almacenar la fecha de Lilian
El segundo argumento obligatorio es un elemento de datos que se utiliza para almacenar los segundos de Lilian
El tercer argumento obligatorio es un elemento de datos que se utiliza para almacenar la fecha gregoriana utilizando el formulario anterior
El cuarto argumento opcional es un elemento de datos que se utiliza para almacenar el código de retroalimentación de la utilidad
Control de comprobaciones y errores
Si el número de argumentos que se pasan a la utilidad no es tres o cuatro, se
BluageWrapperExceptionlanzará unSi se produce alguna excepción durante la conversión del formato local date/time a cualquiera de los formatos de salida: el primer y el segundo argumento se establecerán en 0 y el tercero se mantendrá sin cambios; se registrará un mensaje de error; si lo desea, el titular del código de respuesta recibirá un código de respuesta de gravedad 3 y un mensaje número 2531
En caso de éxito, los tres argumentos se rellenarán con el contenido adecuado y el código de valoración opcional se ingresará con un código de gravedad 0
Ejemplo de uso
Este es un ejemplo de fragmento de COBOL que muestra el uso de la utilidad CEELOCT. La estructura de soporte del código de retroalimentación FC no se proporciona en su totalidad, ya que contiene cientos de entradas de condiciones (nivel 88).
WORKING-STORAGE SECTION. 01 LILIANS PIC S9(9) BINARY. 01 GREGORN PIC X(80). 01 SECONDS COMP-2. 01 FC. ... 01 ROUTINE-NAMES. 05 CEESECS-ROUTINE PIC X(08) VALUE 'CEESECS '. 05 CEELOCT-ROUTINE PIC X(08) VALUE 'CEELOCT '. 05 CEEDATE-ROUTINE PIC X(08) VALUE 'CEEDATE '. ... CALL CEELOCT-ROUTINE USING LILIANS SECONDS GREGORN FC.
CEERAN0
Finalidad
El programa CEERAN0 está llamado a generar números pseudoaleatorios, entre 0.0 y 1.0, utilizando una semilla específica. Se basa en el algoritmo del método congruencial multiplicativo, que requiere una semilla especificada por el usuario. Al usar 0 como semilla se activa un modo específico en el que la semilla se calcula a partir de la hora media de Greenwich (en el momento en que se está ejecutando el programa). De lo contrario, la semilla se usa tal cual. La secuencia pseudoaleatoria es predecible.
Signature
El programa CEERAN0 toma tres parámetros:
la semilla (parámetro de entrada), un elemento de datos que se puede interpretar como un entero positivo (incluido el 0)
el número aleatorio (parámetro de salida), un elemento de datos que se puede interpretar como un número flotante de doble precisión (cuyo valor estará entre 0.0 y 1.0, sin incluir); es el resultado del programa
el código de retroalimentación opcional (parámetro de salida), un elemento de datos de 12 bytes, que se utiliza para almacenar la retroalimentación del programa sobre el cálculo de números aleatorios
Control de comprobaciones y errores
Si el número de argumentos no es 2 o 3, se
IllegalArgumentExceptionlanzará unEl valor inicial debe estar comprendido entre 0 y 2147483646, ambos inclusive. Si el valor inicial está fuera de estos límites, se registrará un mensaje de error y el código de respuesta se establecerá en la gravedad 3 y el número del mensaje en 2524. El número aleatorio resultante se establecerá en -1,0 (análogo al comportamiento tradicional)
Si el valor inicial se establece en 0, pero el sistema no ha podido recuperar la hora media de Greewich (por cualquier motivo), el cálculo se realizará utilizando el valor 1 como alternativa y el código de respuesta se establecerá en 1 y el número de mensaje en 2523. El cálculo de los números aleatorios continuará con el valor inicial alternativo (análogo al comportamiento tradicional)
Ejemplo de uso
Este es un ejemplo de Java que demuestra cómo utilizar el programa CEERAN0, utilizando todos los parámetros, incluido el código de retroalimentación, con bits de varias capas (entidad, servicio):
//Entity layer public class Randomin extends RecordEntity { private final Group root = new Group(getData()).named("RANDOMIN"); private final Elementary randomin = new Elementary(root,new BinaryIntegerType(4, true),new BigDecimal("0")).named("RANDOMIN"); ... public class Randomout extends RecordEntity { private final Group root = new Group(getData()).named("RANDOMOUT"); private final Elementary randomout = new Elementary(root,new DoubleFloatingPointType(),new BigDecimal("0")).named("RANDOMOUT"); ... public class Returncode1 extends RecordEntity { private final Group root = new Group(getData()).named("RETURNCODE"); private final Elementary returncode1 = new Elementary(root,new AlphanumericType(12)," ").named("RETURNCODE"); ... // Service layer CallHandler.newInstance(ctrl, ctx, ctx.getErrorContext()) .byReference(ctx.getRandomin().getRandominReference(), ctx.getRandomout().getRandomoutReference(), ctx.getReturncode1().getReturncode1Reference()) .call("CEERAN0");
CESA
Finalidad
La utilidad CEESECS convierte la representación de una cadena de fecha y hora en segundos lilianos (el número de segundos transcurridos desde las 00:00:00 del 14 de octubre de 1582).
Signature
Dada su naturaleza, la utilidad CEESECS está pensada más bien para ser llamada desde programas.
Se necesitan tres o cuatro argumentos (el último argumento es opcional):
El primer argumento obligatorio es un elemento de datos cuyo valor se interpretará como una marca de tiempo
El segundo argumento obligatorio es un elemento de datos alfanumérico que contiene la
PICTUREcadena utilizada para especificar cómo interpretar el primer argumentoEl tercer argumento obligatorio es el elemento de datos, que contiene el resultado de la conversión del primer argumento al segundo como
PICTUREEl cuarto argumento opcional es un elemento de datos que se utiliza para almacenar el código de retroalimentación de la utilidad
Control de comprobaciones y errores
Si el número de argumentos que se pasan a la utilidad no es tres o cuatro, se
BluageWrapperExceptionlanzará unSi la marca de tiempo transferida a la utilidad como argumento no es válida, se registrará un mensaje de error y, de forma opcional, se enviará al titular del código de valoración un código de valoración de gravedad 3 y un mensaje número 2513
Si la imagen que se ha enviado a la utilidad como argumento no es válida, se registrará un mensaje de error y, si lo desea, el titular del código de valoración recibirá un código de valoración de gravedad 3 y un mensaje número 2518
Si, por alguna razón, no se puede calcular la salida en segundos de lilian, el tercer argumento (salida) se establecerá en 0
Ejemplo de uso
Este es un ejemplo de llamada a la utilidad CEESECS en un programa COBOL:
WORKING-STORAGE SECTION. 01 SECONDS COMP-2. 01 TIMESTAMP-IN. 05 TIMESTAMP-IN-LEN PIC S9(4) BINARY. 05 TIMESTAMP-IN-STR. 10 TIMESTAMP-IN-CHAR PIC X OCCURS 0 TO 256 DEPENDING ON TIMESTAMP-IN-LEN. 01 MASK. 05 MASK-LEN PIC S9(4) BINARY. 05 MASK-STR. 10 MASK-CHR PIC X OCCURS 0 TO 256 DEPENDING ON MASK-LEN. 01 FC. ... 01 ROUTINE-NAMES. 05 CEESECS-ROUTINE PIC X(08) VALUE 'CEESECS '. 05 CEELOCT-ROUTINE PIC X(08) VALUE 'CEELOCT '. 05 CEEDATE-ROUTINE PIC X(08) VALUE 'CEEDATE '. ... ... * date for lilian second 12,799,191,601.123 MOVE '1988-5-16-19:00:01.123' TO TIMESTAMP-IN-STR MOVE 23 TO MASK-LEN MOVE 'YYYY-MM-DD-HH:MI:SS.999' TO MASK-STR CALL CEESECS-ROUTINE USING TIMESTAMP-IN MASK SECONDS FC.
ILBOBAN0
Finalidad
El propósito del programa ILBOABN0 es interrumpir la unidad de ejecución actual de forma controlada, utilizando un código abend (extremo anormal) proporcionado por el usuario. Se utiliza a menudo en programas dedicados a la gestión de errores.
La interrupción de la unidad de ejecución actual se produce al lanzar unStopRunUnitException.
Signature
El programa ILBOABN0 utiliza un único argumento obligatorio, que es un elemento de datos que contiene el código abend (que debe poder interpretarse como un número entero).
Control de comprobaciones/manejo de errores
Al lanzar el botón StopRunUnitException para interrumpir la ejecución de la unidad de ejecución actual, el programa establecerá el código de retorno en el valor proporcionado como primer argumento. Además, se registrará un mensaje informativo.
Ejemplo de uso
A continuación, se muestra un ejemplo del uso en Java del programa ILBOABN0, resultante de una modernización de COBOL mediante la transformación de AWS:
77 WS-ABND-CODE COMP PIC S9(4) VALUE +1234. ... ... 1970-ABNDIT. CALL 'ILBOABN0' USING WS-ABND-CODE.
y la correspondiente modernización de Java:
//Entity layer private final Group root = new Group(getData()); private final Elementary wsAbndCode = new Elementary(root,new BinaryType(4, 0, "STD", false, false, true),Short.valueOf("1234")); ... //Service layer @Override public void _1970Abndit(final MyPgmContext ctx, final ExecutionController ctrl) { ctrl.callSubProgram("ILBOABN0", CallBuilder.newInstance() .byReference(ctx.getWsAbndCode().getWsAbndCodeReference()) .getArguments(), ctx);