Enterprise COBOL V5

Transcription

Enterprise COBOL V5
Cobol v5
http://www.ibm.com/software/awdtools/cobol
http://www.ibm.com/software/products/en/entecoboforzos
© 2014 IBM Corporation
Incidents rencontrés lors de migrations
2
© 2014 IBM Corporation
USAGE DISPLAY
Extrait du manuel Enterprise COBOL V5.2 Programming Guide:
Each digit of a valid zoned decimal number is represented by a single byte from X’F0’ through X’F9’. The 4 high-order bits of
each byte are zone bits, and the 4 low-order bits of each byte contain the value of the digit. The 4 high-order bits of the loworder byte for SIGN TRAILING represent the sign of the item. The sign is in the high-order byte with SIGN LEADING, or in a
separate byte for SIGN IS SEPARATE.
COBOL V5 considère que tous les bits de zone sont toujours corrects. Il génère des instructions différentes des précédentes
versions de COBOL lorsque les bits de zones sont incorrects.
Détectez les bits de zone incorrects avec l’option ZONECHECK disponible en COBOL V5.1 dans la version de juin 2015 et
en COBOL V5.2 avec les PTF de mai 2015
© 2014 IBM Corporation
USAGE DISPLAY (exemple)
Exemple de code source
77 VALUE0 PIC X(4) VALUE ‘00 0’.
<* x’F0F040F0’; the third byte has x'4'
<* for zone bits, legal in PIC X, but
77 VALUE1 REDEFINES VALUE0 PIC 9(4). <* not valid in PIC 9 USAGE DISPLAY
PROCEDURE DIVISION.
IF VALUE1 = ZERO
DISPLAY ‘ZERO'
ELSE
DISPLAY ‘NOT ZERO'
END-IF
L’affichage de 'ZERO' ou 'NOT ZERO' dépend des options de compilation utilisées.
Si vous êtes certains qu’il n’y a pas de données USAGE DISPLAY incorrectes utilisées par votre programme, vous pouvez
utiliser ZONEDATA(PFD) en COBOL V5. Sinon, pour continuer d’avoir le même résultat qu’avec COBOL V4 (ou version plus
ancienne),
si vous utilisiez l’option
utilisez en COBOL V5
NUMPROC(MIG)
ZONEDATA(MIG) et NUMPROC(NOPFD)
NUMPROC(NOPFD)
ZONEDATA(NOPFD) et NUMPROC(NOPFD)
NUMPROC(PFD)
ZONEDATA(NOPFD) et NUMPROC(PFD)
© 2014 IBM Corporation
Modification de données d’une table
Modification de données en dehors des limites d’une table
Ces types de programmes incorrects peuvent être détectés à l’exécution en utilisant l’option de compilation SSRANGE. Vous
pouvez constater des résultats différents en COBOL V5 par rapport aux anciennes versions car la mémoire est disposée
différemment en COBOL V5.
Modification des données suivant une table définie avec INDEXED BY index
Modifier des données au-delà de la fin d’une table indexée va écraser l’index en COBOL V5 car les indices sont stockés
immédiatement après la table au lieu d’être stockés ailleurs. Ce n’est qu’une extension du cas précédent, dont l’option de
compilation SSRANGE permet de détecter cette anomalie lors de l’exécution.
© 2014 IBM Corporation
Zones surpeuplées : valeur ayant plus de chiffres que la zone prévue
Il n’y a pas de moyen de les détecter, mais le problème ne survient que lors de MOVE entre de tells zones.
Exemple
01 X PIC X(2).
01 Y REDEFINES X PIC 9(2) PACKED-DECIMAL.
01 Z REDEFINES X PIC 9(4) COMP.
MOVE x'123F' TO X.
MOVE x'FFFF' TO X.
Le premier MOVE affecte la valeur x’123F’, 4671 en binaire (donc correct pour Z) mais +123 en décimal packé (qui occupe
plus de 2 positions). Tout code qui présume que les données définies en PACKED-DECIMAL n’ont pas plus de chiffres que
ce qui est spécifié peut se comporter incorrectement.
Le second MOVE affecte la valeur x’FFFF’ à X, ce qui n’est en aucun cas une valeur normale pour du PACKED-DECIMAL
(65535 en binaire non signé). Quasiment toute opération sur Y à ce point se traduit par un ABEND de type data exception,
donc le problème est capté.
– Si vous avez compilé avec TRUNC(STD), là où vous espérez que le compilateur va toujours tronquer, on aboutit à une
valeur COMP plus grande que la description de zone, qui fait que les troncations ne sont pas toujours correctes.
– Si vous avez compilé avec TRUNC(OPT), comme l’explique le Programming Guide, des résultats imprédictibles peuvent
survenir.
© 2014 IBM Corporation
Zones de communication
Description : spécifier une zone de taille différente dans la LINKAGE SECTION du programme appelé par rapport à sa
définition de zone dans le programme appelant :
Déclarer un paramètre dans un programme appelé comme plus grand que le paramètre passé est incorrect en COBOL. Les
résultats sont imprédictibles. Dans un cas client, le programme appelé finissait par modifier des blocs de contrôle IBM
internes dans le programme appelant et modifier un code FILE STATUS, ce qui résultait dans un changement du déroulement
du programme appelant.
Le compilateur ne peut pas détecter les divergences entre les paramètres puisqu’il s’agit de deux sources différents.
Reportez-vous au manuel Enterprise COBOL V5.1 Programming Guide, pg. 484
© 2014 IBM Corporation
ODO hors zone
Vous pouvez utiliser l’option SSRANGE pour détecter ces cas à l’exécution. Voici un exemple client :
01 X PIC 9(5) BINARY.
01 MY-TABLE.
02 T OCCURS 0 TO 1 TIMES DEPENDING ON X.
05 MY-FIELD PIC X(1).
01 OFLOW PIC X(500).
...
MOVE 300 TO X.
MOVE ALL 'X' TO MY-TABLE.
DISPLAY MY-TABLE
DISPLAY OFLOW
IGZ0007S The size of variable length group MY-TABLE exceeded
the maximum defined length of the group at the time of
reference by verb number 01 on line 000023.
Dans les versions plus anciennes du compilateur, 300 ‘X’ sont mis dans la zone MY-TABLE, ce qui place 99 ‘X’ au début de
la zone OFLOW.
En COBOL V5, puisque les déplacements de longueur variable sont traités différemment, le MOVE se traduit par le
déplacement de un ‘X’ suivi par 299 octets de données bidons. Le problème ici est que le ‘X’ a été associé à quelque chose
en dehors du champ autorisé pour MY-TABLE.
© 2014 IBM Corporation
Merci !
Questions ou Commentaires ?
9
© 2014 IBM Corporation
Comment s’abonner ?
Joindre la communauté
https://greenhouse.lotus.com/communities/community/cobolfrance
© 2014 IBM Corporation

Documents pareils

Développer en langage COBOL

Développer en langage COBOL Recherche dans les tables (SEARCH)

Plus en détail

Cliquez et modifiez le titre

Cliquez et modifiez le titre Troisièmeregarding niveau potential future products is not a commitment, • The information promise, or legal

Plus en détail