

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.](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)

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
<a name="system-misc-utilities"></a>

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\$1 \$1NOT AND/CBL\$1OR/CBL\$1XOR/CBL\$1EQ/CBL\$1IMP/CBL
<a name="cbl-bitwise"></a>

### Finalidad
<a name="cbl-bitwise-purpose"></a>

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\$1NOT | Complemento bit a bit (\$1target) | 
+ Operadores binarios:


| Operadores binarios | details | 
| --- | --- | 
| CBL\$1AND | AND a nivel de bits (origen y destino) | 
| CBL\$1OR | O bit a bit (fuente \$1 destino) | 
| CBL\$1XOR | O exclusivo bit a bit (fuente ^ destino) | 
| CBL\$1EQ | Equivalencia bit a bit (\$1 (fuente ^ destino)) | 
| CBL\$1IMP | Implicación bit a bit (\$1fuente \$1 destino) | 

### Signature
<a name="cbl-bitwise-signature"></a>

Además de CBL\$1NOT, 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
<a name="cbl-bitwise-error"></a>
+ 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 `IllegalArgumentException` lanzará 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
<a name="cbl-bitwise-sample"></a>
+ Ejemplo de operador unitario:

Este es un uso de CBL\$1NOT 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\$1AND:

```
   * 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
<a name="cee3abd"></a>

### Finalidad
<a name="cee3abd-purpose"></a>

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
<a name="cee3abd-signature"></a>

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
<a name="cee3abd-error"></a>
+ Comprueba que se están proporcionando 0 o 2 argumentos; de lo contrario, se `IllegalArgumentException` generará 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 name="cee3abd-sample"></a>

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
<a name="ceedate"></a>

### Finalidad
<a name="ceedate-purpose"></a>

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
<a name="ceedate-signature"></a>

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 `PICTURE` cadena utilizada para la conversión de la fecha a caracteres
+ El 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 `PICTURE`
+ El 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
<a name="ceedate-error"></a>
+ Si el número de argumentos que se pasan a la utilidad no es tres o cuatro, se `BluageWrapperException` lanzará un
+ Si 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 2518
+ Si, 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
<a name="ceedate-sample"></a>

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
<a name="ceeloct"></a>

### Finalidad
<a name="ceeloct-purpose"></a>

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
<a name="ceeloct-signature"></a>

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
<a name="ceeloct-error"></a>
+ Si el número de argumentos que se pasan a la utilidad no es tres o cuatro, se `BluageWrapperException` lanzará un
+ Si 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
<a name="ceeloct-sample"></a>

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
<a name="ceeran0"></a>

### Finalidad
<a name="ceeran0-purpose"></a>

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
<a name="ceeran0-signature"></a>

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
<a name="ceeran0-error"></a>
+ Si el número de argumentos no es 2 o 3, se `IllegalArgumentException` lanzará un
+ El 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
<a name="ceeran0-sample"></a>

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
<a name="ceesecs"></a>

### Finalidad
<a name="ceesecs-purpose"></a>

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
<a name="ceesecs-signature"></a>

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 `PICTURE` cadena utilizada para especificar cómo interpretar el primer argumento
+ El tercer argumento obligatorio es el elemento de datos, que contiene el resultado de la conversión del primer argumento al segundo como `PICTURE`
+ 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
<a name="ceesecs-error"></a>
+ Si el número de argumentos que se pasan a la utilidad no es tres o cuatro, se `BluageWrapperException` lanzará un
+ Si 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
<a name="ceesecs-sample"></a>

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
<a name="ilboabn0"></a>

### Finalidad
<a name="ilboabn0-purpose"></a>

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 un`StopRunUnitException`.

### Signature
<a name="ilboabn0-signature"></a>

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
<a name="ilboabn0-error"></a>

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 name="ilboabn0-sample"></a>

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