Aller au contenu

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

SETON

Allumer des indicateurs

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

Syntaxe

     C                     SETON                     010203
     C  N10 11             SETON                     20
     C                     SETON                     LR
Indicateurs de conditionnement (9-17)
Facultatifs : jusqu'à trois indicateurs, chacun précédé d'un N pour la négation (colonnes 9, 12 et 15). Tous doivent être vrais (ET) pour que la ligne s'exécute. Pour un OU ou plus de trois conditions, on utilise des lignes AN et OR (colonnes 7-8).
Indicateurs (54-55)
Premier indicateur à allumer.
(56-57)
Deuxième indicateur à allumer, facultatif.
(58-59)
Troisième indicateur à allumer, facultatif. Un des trois au moins est obligatoire.
Effet
Chaque indicateur nommé passe à '1'. Les autres indicateurs ne changent pas. Aucune zone n'est modifiée.

À quoi ça sert

Les indicateurs (01 à 99, plus LR…) sont les variables booléennes du RPG III. SETON les allume, SETOF les éteint, et on les utilise ensuite pour conditionner une ligne (colonnes 9-17) ou pour les tester par *IN01.

On allume souvent un indicateur d'erreur, un indicateur d'affichage d'écran ou l'indicateur LR en fin de programme. Une ligne SETON peut en allumer trois d'un coup, et peut elle-même être conditionnée, comme n'importe quelle ligne de calcul.

Pour conditionner une ligne avec plus de trois indicateurs, ou avec un OU, on écrit une première ligne qui ne porte que des indicateurs (pas de code opération), puis des lignes AN ou OR en colonnes 7-8. La dernière ligne, celle qui porte le code opération, commence elle aussi par AN ou OR (deuxième exemple ci-dessous).

Exemple 1 : Trois indicateurs sur une ligne

     H*  SETON : allumer trois indicateurs sur une seule ligne
     C*  Avant : tous eteints
     C           *IN01     DSPLY
     C           *IN02     DSPLY
     C           *IN03     DSPLY
     C                     SETON                     010203
     C*  Apres : les trois sont allumes
     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
0
0
1
1
1

Avant le SETON, les indicateurs 01, 02 et 03 sont éteints (0). Une seule ligne, avec 01, 02 et 03 dans les colonnes 54-59, les allume tous les trois. DSPLY sur *IN01 montre la valeur de l'indicateur.

Exemple 2 : Conditionner un SETON : N, ET, ligne AN

     H*  SETON : conditionnement par N et par une ligne AN
     C                     SETON                     1011
     C                     SETOF                     12
     C*  20 : 10 allume ET 11 eteint -> faux, 11 est allume
     C   10N11             SETON                     20
     C*  21 : 10 allume ET 11 allume -> vrai
     C   10 11             SETON                     21
     C*  22 : 10 ET 11 ET N12 sur trois lignes -> vrai
     C   10
     CAN 11N12             SETON                     22
     C           *IN20     DSPLY
     C           *IN21     DSPLY
     C           *IN22     DSPLY
     C                     SETON                     LR

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

0
1
1

Les indicateurs 10 et 11 sont allumés, 12 éteint. Le premier SETON est conditionné par 10 et N11 : 11 est allumé, la condition est fausse, 20 reste éteint. Le deuxième demande 10 et 11 : vrai, 21 s'allume. Le troisième utilise une ligne de conditionnement seule (10), puis une ligne AN (11 et N12) qui porte aussi le SETON : les trois conditions sont vraies, 22 s'allume.

Exemple 3 : SETON LR ne termine pas le programme tout de suite

     H*  SETON LR : le programme ne s'arrete pas sur la ligne
     C           *INLR     DSPLY
     C                     SETON                     LR
     C*  LR est allume mais les lignes suivantes s'executent
     C           *INLR     DSPLY
     C           'Apres LR'DSPLY
     C                     SETON                     LR

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

0
1
Apres LR

Après SETON LR, *INLR vaut 1, mais le programme continue : le DSPLY 'Apres LR' placé après s'exécute. Le programme ne se termine qu'à la fin du cycle, quand il atteint la dernière ligne.

Le piège

SETON LR n'arrête pas le programme : toutes les lignes qui suivent sont exécutées (troisième exemple, « Apres LR » s'affiche). Placez SETON LR en dernière ligne, ou sachez que le code placé après s'exécute encore.

Un indicateur de condition doit être défini quelque part : un N12 qu'aucune ligne ne positionne donne QRG7030, « La zone ou l'indicateur n'est pas défini » (gravité 30, la compilation échoue). Dans le deuxième exemple, un SETOF 12 règle le problème.

Indicateurs et alignement : chaque indicateur de conditionnement occupe 3 colonnes (N ou blanc, puis deux chiffres). Décalé d'une colonne, il donne QRG5006, « La zone Non ne contient pas N, et n'est pas à blanc » et QRG5007, « L'indicateur de condition est incorrect ».

En RPG ILE full free

En RPG ILE, on affecte *ON à l'indicateur, un indicateur à la fois.

*in01 = *on;
*in02 = *on;
*in03 = *on;
*inlr = *on;