Coder en RPG full free, sans une seule colonne à compter
Les trois mêmes programmes, cette fois en **FREE : du code qui commence en colonne 1,
des déclarations DCL-F, DCL-PI et DCL-S, des instructions terminées par un point-virgule. Compilés
par CRTBNDRPG, débogués dans STRDBG et testés sur un IBM i 7.5.
En une phrase
Un source full free commence par la ligne
**FREE : tout le code qui suit est en format libre, de la colonne 1 jusqu'au
bout de la ligne, sans aucune spécification en colonnes. C'est toujours du RPG IV : même
compilateur (CRTBNDRPG), même débogueur (STRDBG).
Préparer l'atelier
Une bibliothèque JOBIRF, les mêmes fichiers source, les mêmes DDS que pour le
RPG III et le RPG IV colonné. Le
membre RPG reste de type RPGLE. IBM présente **FREE parmi les nouveautés
de la 7.3.
CRTLIB LIB(JOBIRF) TEXT('job-i.fr : coder en RPG full free')
CRTSRCPF FILE(JOBIRF/QRPGLESRC) RCDLEN(92)
CRTSRCPF FILE(JOBIRF/QDDSSRC) RCDLEN(92)
CRTSRCPF FILE(JOBIRF/QCLSRC) RCDLEN(92)
ADDLIBLE JOBIRF
IBM indique qu'en full free il n'y a pas de limite pratique à la longueur d'une ligne. Dans un membre, c'est la longueur d'enregistrement du fichier source qui limite : avec 92, une ligne garde 80 caractères, largement assez ici.
Et SEU ?
SEU ouvre le membre, mais à partir de la colonne 6, comme pour tout source RPG : le code full free, qui commence en colonne 1, apparaît amputé de ses cinq premiers caractères.

F19 décale l'affichage vers la gauche et rend le code lisible. Mais il suffit de retaper une ligne valide et d'appuyer sur Entrée pour que SEU la refuse :

À la sortie, SEU signale des erreurs de syntaxe dans le membre et propose de revenir à l'édition. Le programme, lui, compile sans erreur. SEU n'est donc plus l'outil pour écrire du full free : on l'écrit dans un éditeur qui connaît le format libre, puis on compile de la même façon.
Programme 1 Hello world
Hello world : quatre lignes
**FREE
// HELLO : le premier programme en RPG full free
dsply 'Hello world !';
*inlr = *on;
**FREE- Obligatoire sur la première ligne, en colonne 1 : il annonce un source entièrement libre.
// HELLO : …- Un commentaire, jusqu'à la fin de la ligne.
dsply 'Hello world !';- Le littéral directement dans l'instruction, sans zone intermédiaire.
*inlr = *on;- Toujours LR pour terminer, sans EVAL. La casse est libre.
CRTBNDRPG PGM(JOBIRF/HELLO) SRCFILE(JOBIRF/QRPGLESRC) DBGVIEW(*SOURCE)
CALL HELLO

Programme 2 Sans écran, avec un PF à clé
Sortir du stock un article lu par sa clé
**FREE
// SORTIE : sortie de stock d'un article, sans ecran.
// Parametres : code article, quantite (5 chiffres),
// code retour : OK, INC (inconnu), INS (stock insuffisant)
dcl-f ARTICLE usage(*update) keyed;
dcl-pi *n;
pCode char(5);
pQteA char(5);
pRet char(3);
end-pi;
dcl-s qte packed(5:0);
qte = %dec(pQteA:5:0);
chain pCode ARTICLE;
if not %found(ARTICLE);
pRet = 'INC';
elseif qte > ARTSTK;
pRet = 'INS';
else;
ARTSTK -= qte;
update ARTICLR;
pRet = 'OK ';
endif;
*inlr = *on;
dcl-f ARTICLE usage(*update) keyed;- Le fichier, ouvert en mise à jour, lu par la clé. Le format (ARTICLR) et les zones (ARTCOD, ARTLIB, ARTSTK) viennent des DDS, comme avant.
dcl-pi *n; … end-pi;- Les trois paramètres reçus par le programme, avec leur type.
chain pCode ARTICLE;etif not %found(ARTICLE);- Lecture par la clé, puis test du résultat par
%found. ARTSTK -= qte;- Soustraction et affectation en une instruction.
Du colonné au libre, ligne à ligne
| RPG IV colonné | Full free | Remarque |
|---|---|---|
FARTICLE UF E K DISK | dcl-f ARTICLE usage(*update) keyed; | DISK et décrit en externe sont les valeurs par défaut. En colonnes, U permet aussi de supprimer ; en libre, il faut ajouter *DELETE à usage. |
DSORTIE PI | dcl-pi *n; … end-pi; | L'interface du programme ; *N évite de répéter son nom. |
D PCode 5A | pCode char(5); | Un paramètre : le type s'écrit en toutes lettres. |
DQte S 5P 0 | dcl-s qte packed(5:0); | Une zone simple. |
C EVAL ARTSTK = ARTSTK - Qte | ARTSTK -= qte; | Plus d'EVAL, et l'opérateur -= existe. |
C PCode CHAIN ARTICLE | chain pCode ARTICLE; | Le facteur 1 vient juste après le code opération. |
CRTBNDRPG PGM(JOBIRF/SORTIE) SRCFILE(JOBIRF/QRPGLESRC) DBGVIEW(*SOURCE)
Programme 3 Un écran, un PF et un LF
Consulter un article par son code ou par son libellé
Toujours l'écran ARTECR et le LF ARTICL1 de la page RPG III. Trois dcl-f, et la logique
du RPG IV colonné, sans les colonnes :
**FREE
// ARTCON : consultation d'un article par son code (PF)
// ou par le debut de son libelle (LF). F3 pour sortir.
dcl-f ARTECR workstn;
dcl-f ARTICLE keyed;
dcl-f ARTICL1 keyed;
dow not *in03;
exfmt ECRAN;
if *in03;
leave;
endif;
*in41 = *off;
*in42 = *off;
if ECODE <> *blanks;
// Un code : acces direct par la cle du PF
chain ECODE ARTICLE;
*in41 = not %found(ARTICLE);
else;
// Sinon : positionnement dans le LF, puis lecture
setll ERECH ARTICL1;
read ARTICL1;
*in42 = %eof(ARTICL1);
endif;
// Rien trouve : on vide la fiche
if *in41 or *in42;
clear ARTCOD;
clear ARTLIB;
clear ARTSTK;
endif;
enddo;
*inlr = *on;
dcl-f ARTECR workstn;- L'écran : WORKSTN suffit, le fichier est alors en entrée et sortie.
dcl-f ARTICLE keyed;- Sans
usage, un fichier DISK est en lecture seule. *in41 = not %found(ARTICLE);- Les indicateurs 41 et 42 restent ceux des DDS : ils conditionnent les messages de l'écran.
CRTPF FILE(JOBIRF/ARTICLE) SRCFILE(JOBIRF/QDDSSRC)
CRTLF FILE(JOBIRF/ARTICL1) SRCFILE(JOBIRF/QDDSSRC)
CRTDSPF FILE(JOBIRF/ARTECR) SRCFILE(JOBIRF/QDDSSRC)
CRTBNDRPG PGM(JOBIRF/ARTCON) SRCFILE(JOBIRF/QRPGLESRC) DBGVIEW(*SOURCE)
CALL ARTCON

Déboguer avec STRDBG
Comme en RPG IV colonné : STRDBG, points d'arrêt, F12, puis l'appel. STRDBG affiche le source libre tel qu'il est écrit, numéroté ligne par ligne.
STRDBG PGM(JOBIRF/SORTIE) UPDPROD(*YES)
BREAK 19
CALL SORTIE PARM('A0002' '00005' ' ')
ENDDBG

Cette fois, le point d'arrêt est posé par une commande : BREAK 19 sur la ligne de
commande du débogueur, au lieu de F6.

BREAK 19 : « Point d'arrêt ajouté à la ligne 19. »
elseif qte > ARTSTK;.| Commande ou touche | Résultat relevé |
|---|---|
EVAL ARTSTK | ARTSTK = 0001200. |
| F10, trois fois | « Etape terminée à la ligne 21 », puis 22, puis 23 |
EVAL ARTSTK en ligne 23 | ARTSTK = 0001195. |
Second appel, EVAL ARTSTK = 3 | ARTSTK = 3 = 0000003. |
| F10 | « Etape terminée à la ligne 20 » : la branche pRet = 'INS' |

update ARTICLR;, ARTSTK vaut 1 195.
Tester
Le même CL de test, compilé par CRTBNDCL, sur la bibliothèque JOBIRF :
CRTBNDCL PGM(JOBIRF/TSTSORTIE) SRCFILE(JOBIRF/QCLSRC) DBGVIEW(*SOURCE)
CALL TSTSORTIE

Les trois versions passent le même test et laissent le même stock : A0001 à 490, A0002 à 1 195 (après le débogage), A0004 à 0. Trois écritures du même programme, un seul comportement : c'est ce que le test permet d'affirmer.
Sources
Les exemples ont été créés et relevés sur un IBM i 7.5 (voir la méthode). Les définitions et les règles viennent de ces sources, consultées le 16 octobre 2026 :
- Start Source Entry Utility (STRSEU), IBM, IBM i 7.5 CL commands. L'éditeur de source en 5250.
- Create Bound RPG Program (CRTBNDRPG), IBM, IBM i 7.5 CL commands. La création d'un programme ILE RPG en une étape, le paramètre DBGVIEW, le fichier STREAM source.
- Create Bound CL Program (CRTBNDCL), IBM, IBM i 7.5 CL commands. La compilation du programme de test en CL ILE.
- Start Debug (STRDBG), IBM, IBM i 7.5 CL commands. Le débogueur des programmes ILE et le paramètre UPDPROD.
- ILE RPG Programmer's Guide (SC09-2507-12), IBM, IBM i 7.5 (PDF). SEU et le type RPGLE ; CRTBNDRPG DBGVIEW(*SOURCE) puis STRDBG ; F10 pas à pas, F11 afficher, F12 reprendre ; les commandes BREAK et EVAL (EVAL COUNTER=3) ; UPDPROD(*NO) par défaut.
- ILE RPG Reference (SC09-2508-12), IBM, IBM i 7.5 (PDF). Les positions des spécifications F, D et C du RPG IV (facteur 1 en 12-25, opération en 26-35, facteur 2 en 36-49, facteur 2 étendu en 36-80) ; **FREE, présenté parmi les nouveautés de la 7.3 : code de la colonne 1 jusqu'au bout de la ligne ; DCL-PI *N ; REQPREXP(*NO) par défaut, pas de prototype obligatoire.
- L'aide en ligne des commandes citées, livrée avec IBM i 7.5 et reprise en français dans les fiches des commandes CL de ce site. Paramètres de CRTRPGPGM, CRTBNDRPG, CRTCLPGM, CRTBNDCL, CALLPRC, STRISDB, STRDBG, STRSEU, WRKMBRPDM, CRTPF, CRTLF et CRTDSPF.
Questions fréquentes
Qu'est-ce que le RPG full free ?
C'est un source RPG dont la première ligne est **FREE : tout le code est en format libre, peut commencer en colonne 1 et aller jusqu'au bout de la ligne. Les déclarations s'écrivent DCL-F, DCL-S, DCL-PI, les calculs se terminent par un point-virgule.
Peut-on éditer du RPG full free avec SEU ?
On peut ouvrir le membre, mais SEU l'affiche à partir de la colonne 6 et signale une erreur de syntaxe sur des lignes pourtant valides. Mieux vaut un éditeur qui connaît le format libre.
Comment déboguer un programme RPG full free ?
Avec STRDBG, comme tout programme ILE : compilez avec DBGVIEW(*SOURCE), lancez STRDBG, posez un point d'arrêt par F6 ou par la commande BREAK suivie du numéro de ligne, puis appelez le programme.
Que remplace DCL-PI *N ?
L'interface de la procédure principale, c'est-à-dire les paramètres reçus par le programme. Elle remplace le *ENTRY PLIST du RPG III ; *N évite de répéter le nom du programme.