Aller au contenu

Code opération RPG III / RPG/400 · IBM i (AS/400) · Indicateurs et branchements

SETOF

Éteindre des indicateurs

Éteint jusqu'à trois indicateurs écrits dans les colonnes 54-55, 56-57 et 58-59.

Syntaxe

     C                     SETOF                     010203
     C  N10                SETOF                     20
Indicateurs de conditionnement (9-17)
Facultatifs : jusqu'à trois indicateurs avec N pour la négation, tous vrais (ET). Les lignes AN et OR des colonnes 7-8 permettent d'aller plus loin.
Indicateurs (54-55)
Premier indicateur à éteindre.
(56-57)
Deuxième indicateur, facultatif.
(58-59)
Troisième indicateur, facultatif. Un des trois au moins est obligatoire.
Effet
Chaque indicateur nommé passe à '0'. Les indicateurs non nommés ne changent pas.

À quoi ça sert

SETOF est le contraire de SETON : on remet à zéro un indicateur d'erreur avant de refaire un contrôle, un indicateur de fin de fichier avant de relire, un indicateur d'écran avant d'afficher.

Les deux opérations sont jumelles : mêmes colonnes, mêmes règles de conditionnement. Une ligne SETOF peut éteindre trois indicateurs, et elle peut être conditionnée par une ligne de conditions suivie de lignes OR, comme dans le deuxième exemple.

Exemple 1 : Éteindre deux indicateurs sur trois

     H*  SETOF : eteindre plusieurs indicateurs sur une ligne
     C                     SETON                     010203
     C                     SETOF                     01  03
     C           *IN01     DSPLY
     C           *IN02     DSPLY
     C           *IN03     DSPLY
     C                     SETON                     LR

Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :

0
1
0

Les indicateurs 01, 02 et 03 sont allumés, puis un SETOF éteint 01 et 03. Seul 02, non nommé, reste allumé.

Exemple 2 : Conditionner par OR

     H*  SETOF : remise a zero conditionnee, lignes OR
     C                     SETON                     1011
     C*  13 reste allume si 10 est eteint OU 11 est eteint
     C                     SETON                     13
     C  N10
     CORN11                SETOF                     13
     C           *IN13     DSPLY
     C*  Avec 11 eteint, le OR devient vrai
     C                     SETOF                     11
     C  N10
     CORN11                SETOF                     13
     C           *IN13     DSPLY
     C                     SETON                     LR

Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :

1
0

On veut éteindre 13 quand 10 ou 11 est éteint. Une ligne ne porte que N10, puis la ligne OR porte N11 et le SETOF. Au premier essai 10 et 11 sont allumés : la condition est fausse, 13 reste allumé (1). Après avoir éteint 11, elle est vraie : 13 s'éteint (0).

Le piège

Dans une condition à plusieurs lignes, la ligne du code opération porte elle aussi le OR ou le AN et la ligne de tête ne contient que des indicateurs. Si la ligne du code opération n'a pas son OR/AN, le compilateur répond QRG5004, « Le niveau de contrôle AND/OR requis n'est pas défini ». Une ligne AN placée avant la ligne de tête donne QRG5003, « Le niveau de contrôle entré avec AND/OR est incorrect ».

Les indicateurs non nommés ne bougent pas : SETOF 01 03 laisse 02 tel quel (premier exemple).

En RPG ILE full free

En RPG ILE on affecte *OFF.

*in01 = *off;
*in03 = *off;