AWS Le service de modernisation du mainframe (expérience de l'environnement d'exécution géré) n'est plus ouvert aux nouveaux clients. Pour des fonctionnalités similaires au service de modernisation AWS du mainframe (expérience de l'environnement d'exécution géré), explorez le service de modernisation AWS du mainframe (expérience autogérée). Les clients existants peuvent continuer à utiliser le service normalement. Pour plus d'informations, consultez la section Modification de la disponibilité de la modernisation du AWS mainframe.
Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Autres//Utilitaires divers
Cette section couvre divers programmes utilitaires, à des fins diverses, qui n'ont pas pu être rattachés à des catégories existantes
Dans les paragraphes suivants, PICTURE il doit être compris comme le PICTURE mot clé COBOL, utilisé pour décrire le type de données et les formats des champs.
CBL_ _NON AND/CBL_OR/CBL_XOR/CBL_EQ/CBL_IMP/CBL
Objectif
Cela concerne la prise en charge des opérations logiques au niveau du bit sur les éléments de données, que l'on trouve dans certains dialectes COBOL (Micro Focus). Veuillez noter que le refactorisation automatique avec AWS Transform gère la transformation des utilisations des opérateurs bit à bit du dialecte Cobol MF en java (voir les exemples d'utilisation ci-dessous). Pour que le code modernisé fonctionne correctement, l'application utilitaire devra être déployée parallèlement.
Opérateurs pris en charge :
Opérateur unaire :
| Opérateur unaire | détails |
|---|---|
CBL_NOT |
Complément bit à bit (~target) |
Opérateurs binaires :
| Opérateurs binaires | détails |
|---|---|
CBL_AND |
ET bit à bit (source et cible) |
CBL_OR |
OR bit à bit (source | cible) |
CBL_XOR |
OR exclusif au niveau du bit (source ^ cible) |
CBL_EQ |
Équivalence binaire (~ (source ^ cible)) |
CBL_IMP |
Implication binaire (~source | cible) |
Signature
Hormis CBL_NOT qui n'a qu'un seul opérande (cible), toutes les autres opérations ont au moins deux opérandes, qui sont des éléments de données. Le premier opérande est la source, le second est la cible. Un argument optionnel supplémentaire (longueur) indique le nombre d'octets à traiter (de gauche à droite). Si la longueur est omise, elle est définie par défaut sur la taille minimale de la source et de la cible (en octets). Le résultat de l'opération est enregistré dans la cible. Le code de retour du programme est 0 (sauf exception).
Contrôle et gestion des erreurs
Pour chaque opérateur disponible, le nombre d'arguments requis est vérifié. Si le nombre minimal d'arguments requis n'est pas atteint, un
IllegalArgumentExceptionsera émis.La positivité de l'argument entier facultatif est vérifiée. Si la longueur fournie est négative, un message sera affiché dans les journaux et l'opérateur ne sera pas appliqué.
Utilisation de l'échantillon
Exemple d'opérateur unaire :
Voici une utilisation cobol de CBL_NOT :
* 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.
et la modernisation Java correspondante :
/* 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);
Exemple d'opérateur binaire :
Voir par exemple le code COBOL suivant utilisant 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.
et sa modernisation 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);
CEE3ABD
Objectif
Ce programme utilitaire imite le comportement de l'ancien programme du même nom, dont le rôle est de terminer un programme avec un code Abend (fin anormale) et un délai de nettoyage facultatif. Le moteur de transformation AWS gère la modernisation automatique des appels vers CEE3 ABD. Pour que le code modernisé fonctionne correctement, l'application utilitaire devra être déployée parallèlement.
Le programme arrête l'unité d'exécution en cours en utilisant le code d'abend fourni. Un message d'information est imprimé dans les journaux, spécifiant qu'une sortie utilisateur a été appelée avec le code donné. Pour l'instant, le paramètre de temporisation n'est PAS pris en compte, mais est présent comme argument pour des raisons de compatibilité avec la modernisation.
Signature
Le programme accepte 0 ou 2 arguments. Les deux arguments sont les suivants :
Le code Abend (un élément de données qui doit être interprétable comme une valeur entière positive)
Le moment du nettoyage (élément de données qui doit être interprétable comme une valeur entière positive) -- ignoré
Lorsqu'aucun argument n'est fourni, les valeurs par défaut suivantes sont utilisées :
Code d'abend : 0
Durée du nettoyage : 0
Contrôle et gestion des erreurs
Vérifie que 0 ou 2 arguments sont fournis, sinon un argument
IllegalArgumentExceptionsera émis.Si deux arguments sont fournis, vérifiez que : le code abend est compris entre 0 et 4095 (les deux inclus) ; le timing est compris entre 0 et 5 (les deux inclus)
Tout échec à ces tests déclenchera unIllegalArgumentException.
Utilisation de l'échantillon
Voici un exemple d'utilisation dans un programme COBOL, à partir de l'application Carddemo :
9999-ABEND-PROGRAM. DISPLAY 'ABENDING PROGRAM' MOVE 0 TO TIMING MOVE 999 TO ABCODE CALL 'CEE3ABD'.
et le code Java modernisé correspondant :
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); }
CÉDER
Objectif
L'utilitaire CEEDATE convertit un nombre représentant une date Lilian (jours écoulés depuis le 15 octobre 1582) en une représentation de date basée sur des caractères, en utilisant un format fourni.
Il imite le comportement de l'ancien utilitaire système portant le même nom.
Signature
Compte tenu de sa nature, l'utilitaire CEEDATE est plutôt destiné à être appelé depuis des programmes.
Il prend trois ou quatre arguments (le dernier argument est facultatif) :
Le premier argument obligatoire est une donnée numérique dont la valeur sera interprétée comme une date Lilian.
Le deuxième argument obligatoire est un élément de données alphanumérique contenant la
PICTUREchaîne utilisée pour la conversion de la date en caractèresLe troisième argument obligatoire est l'élément de données alphanumérique cible, contenant le résultat de la conversion du premier argument en utilisant le deuxième argument comme
PICTURELe quatrième argument facultatif est un élément de données utilisé pour stocker le code de feedback de l'utilitaire.
Contrôle et gestion des erreurs
Si le nombre d'arguments transmis à l'utilitaire n'est pas de trois ou quatre, un
BluageWrapperExceptionsera émisSi le premier argument numérique fourni ne peut pas être correctement évalué en tant que date Lilian (hors limites), un message d'erreur sera enregistré. Le détenteur du code de feedback facultatif, s'il est présent, recevra un code de feedback de gravité 3 et le message numéro 2512
Si une exception se produit lors de la conversion de date en raison d'une saisie non valide
PICTURE, un message d'erreur sera enregistré. Le détenteur du code de feedback facultatif, s'il est présent, recevra un code de feedback de gravité 3 et le message numéro 2518Si, pour une raison quelconque, la conversion ne peut pas se faire correctement, l'élément de données de sortie sera rempli de blancs
Si la conversion est réussie, le détenteur du code d'évaluation facultatif recevra un code de réponse de gravité 0 (et aucun message)
Utilisation de l'échantillon
Voici un exemple d'appel d'un programme COBOL (la structure du support de code de feedback FC contient des points de suspension, tout comme elle contient des centaines d'entrées de conditions (niveau 88) non affichées ici) :
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.
CEELOCT
Objectif
L'utilitaire CEELOCT est utilisé pour renvoyer le fichier local date/time sous trois formats :
Date lilienne (le nombre de jours écoulés depuis le 14 octobre 1582)
Lilian (secondes écoulées depuis le 14 octobre 1582 à 00:00:00)
Chaîne de caractères grégoriens (sous la forme
YYYYMMDDHHMISS999)
Il imite le comportement de l'ancien utilitaire système portant le même nom.
Signature
Compte tenu de sa nature, l'utilitaire CEELOCT est plutôt destiné à être appelé depuis des programmes.
Il prend trois ou quatre arguments (le dernier argument est facultatif) :
Le premier argument obligatoire est un élément de données, utilisé pour stocker la date Lilian
Le deuxième argument obligatoire est un élément de données, utilisé pour stocker les secondes Lilian
Le troisième argument obligatoire est un élément de données, utilisé pour stocker la date grégorienne en utilisant le formulaire ci-dessus
Le quatrième argument facultatif est un élément de données utilisé pour stocker le code de feedback de l'utilitaire.
Contrôle et gestion des erreurs
Si le nombre d'arguments transmis à l'utilitaire n'est pas de trois ou quatre, un
BluageWrapperExceptionsera émisSi une exception se produit lors de la gestion de la conversion du format local date/time vers l'un des formats de sortie : les premier et deuxième arguments seront définis sur 0 et le troisième argument restera inchangé ; un message d'erreur sera enregistré ; éventuellement, le détenteur du code de feedback sera alimenté avec un code de feedback de gravité 3 et le message numéro 2531
En cas de succès, les trois arguments seront remplis avec le contenu approprié et le code de feedback facultatif sera alimenté par un code de gravité 0
Utilisation de l'échantillon
Voici un exemple d'extrait de code COBOL illustrant l'utilisation de l'utilitaire CEELOCT. La structure du support de code de feedback FC n'est pas donnée dans son intégralité car elle contient des centaines d'entrées de conditions (niveau 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
Objectif
Le programme CEERAN0 est appelé pour générer des nombres pseudo-aléatoires, compris entre 0,0 et 1,0, en utilisant une graine spécifiée. Il est basé sur l'algorithme de la méthode congruentielle multiplicative, qui nécessite une valeur de départ spécifiée par l'utilisateur. L'utilisation de 0 comme valeur de départ déclenche un mode spécifique dans lequel la valeur initiale est en fait calculée à partir du temps moyen de Greenwich (au moment de l'exécution du programme). Sinon, la graine est utilisée telle quelle. La séquence pseudo-aléatoire est prévisible.
Signature
Le programme CEERAN0 prend trois paramètres :
la graine (paramètre d'entrée), un élément de données qui peut être interprété comme un entier positif (0 inclus)
le nombre aléatoire (paramètre de sortie), une donnée qui peut être interprétée comme un nombre flottant à double précision (dont la valeur sera comprise entre 0,0 et 1,0, exclusif) ; c'est le résultat du programme
le code de retour optionnel (paramètre de sortie), une donnée de 12 octets, utilisé pour stocker le feedback du programme concernant le calcul des nombres aléatoires
Contrôle et gestion des erreurs
Si le nombre d'arguments n'est pas 2 ou 3, un
IllegalArgumentExceptionsera lancéLa valeur initiale doit être comprise entre 0 et 2147483646 inclus. Si la valeur initiale se situe en dehors de ces limites, un message d'erreur sera enregistré et le code de feedback sera défini sur la sévérité 3 et le numéro du message sur 2524. Le nombre aléatoire obtenu sera fixé à -1,0 (comportement analogue à celui d'origine)
Si la valeur initiale est définie sur 0, mais que le système n'a pas pu récupérer le temps moyen de Greewich (pour une raison quelconque), le calcul sera effectué en utilisant la valeur 1 comme solution de rechange et le code de retour sera défini sur la sévérité 1 et le numéro du message sur 2523. Le calcul des nombres aléatoires se poursuivra avec la valeur initiale de repli (analogue au comportement traditionnel)
Utilisation de l'échantillon
Voici un exemple Java qui montre comment utiliser le programme CEERAN0, en utilisant tous les paramètres, y compris le code de feedback, avec des bits provenant de plusieurs couches (entité, service) :
//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");
CEESECS
Objectif
L'utilitaire CEESECS convertit une représentation sous forme de chaîne d'horodatage en secondes Lilian (le nombre de secondes écoulées depuis le 14 octobre 1582 à 00:00:00).
Signature
Compte tenu de sa nature, l'utilitaire CEESECS est plutôt destiné à être appelé depuis des programmes.
Il prend trois ou quatre arguments (le dernier argument est facultatif) :
Le premier argument obligatoire est un élément de données dont la valeur sera interprétée comme un horodatage
Le deuxième argument obligatoire est un élément de données alphanumérique contenant la
PICTUREchaîne utilisée pour spécifier comment interpréter le premier argument.Le troisième argument obligatoire est l'élément de données, contenant le résultat de la conversion du premier argument en utilisant le deuxième argument comme
PICTURELe quatrième argument facultatif est un élément de données utilisé pour stocker le code de feedback de l'utilitaire.
Contrôle et gestion des erreurs
Si le nombre d'arguments transmis à l'utilitaire n'est pas de trois ou quatre, un
BluageWrapperExceptionsera émisSi l'horodatage transmis à l'utilitaire en tant qu'argument n'est pas valide, un message d'erreur sera enregistré et, éventuellement, le détenteur du code de feedback recevra un code de feedback de gravité 3 et un message numéro 2513
Si l'image transmise à l'utilitaire en tant qu'argument n'est pas valide, un message d'erreur sera enregistré et, éventuellement, le détenteur du code de feedback recevra un code de feedback de gravité 3 et un message numéro 2518
Si, pour une raison quelconque, la sortie en secondes liliennes ne peut pas être calculée, le troisième argument (sortie) sera défini sur 0
Utilisation de l'échantillon
Voici un exemple d'appel à l'utilitaire CEESECS dans un programme 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.
ILBOABN0
Objectif
Le but du programme ILBOABN0 est d'interrompre l'unité en cours d'exécution de manière contrôlée, en utilisant un code d'abend (fin anormale) fourni par l'utilisateur. Souvent utilisé dans les programmes dédiés à la gestion des erreurs.
L'interruption de l'unité en cours d'exécution se produit en lançant unStopRunUnitException.
Signature
Le programme ILBOABN0 prend un seul argument obligatoire qui est un élément de données contenant le code abend (qui doit être interprétable comme un entier).
Contrôle et gestion des erreurs
Lors du lancement du StopRunUnitException pour interrompre l'exécution de l'unité d'exécution en cours, le programme définira le code de retour sur la valeur fournie comme premier argument. De plus, un message d'information sera enregistré.
Utilisation de l'échantillon
Voici un exemple d'utilisation en Java du programme ILBOABN0, issu d'une modernisation de COBOL via AWS Transform :
77 WS-ABND-CODE COMP PIC S9(4) VALUE +1234. ... ... 1970-ABNDIT. CALL 'ILBOABN0' USING WS-ABND-CODE.
et la modernisation de Java correspondante :
//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);