, 5 choses savoir sur les includes

Un include ou un /copy dans un programme permet de copier avant la compile des lignes de sources dans votre programme ou module.
C’est pour normaliser des parties de code qu’on utilise souvent dans une application, souvent des déclarations
exemple :
DS pour les données programme (SDS)
DS pour les données fichier (INFDS)
Découpage d’un paramétrage applicatif d’une *lda ou autre
etc…

1) Utilisation en CLP

C’est pas forcément le langage où en trouve le plus, mais ça peut avoir du sens si on utilise par exemple une routine d’erreur générale
pgm
DCL….
include erreur1
// votre code
include erreur2
ENDPGM

Vous pouvez préciser le fichier ou le répertoire ou se trouve vos includes

Sur les commandes CRTCLMOD ou CRTBNDCL c’est les paramètres INCFILE ou INCDIR

Vous pouvez indiquer dans votre source le fichier ou la bibliothèque , il est bien sur déconseillé de harcoder la bibliothèque, la gestion de la liste de bibliothèque étant préférable.

2) Utilisation en RPG

on peut utiliser des /copy ou des /include
la syntaxe est la même
libraryname/filename,membername
filename,membername
membername

Encore une fois il est fortement déconseillé d’utiliser la bibliothèque,

d/COPY QSYSINC/QRPGLESRC,ECHKPWD1
ou
d/INCLUDE QSYSINC/QRPGLESRC,ECHKPWD1

en free, elle doivent quand même être codé comme une carte …

on peut faire des includes d’includes par exemple on l’utilise dans l’ILE
sourceA
include prototype1
include prototype2

sourceB
include SourceA

C’est souvent utilisé pour le prototypage de fonction et procédure

Vous pouvez indiquer dans une carte h ou dans ctl-opt en free

COPYNEST( n )
Indique le nombre maximal d’imbrications, n étant une valeur
comprise entre 1 et 2048. Si le mot clé COPYNEST n’est pas
spécifié, 32 est utilisée comme valeur maximale.

Je n’ai jamais vu plus de 5 niveaux …

3) Utilisation dans un SQLRPGLE

Comporte une petite subtilité entre les /copy et les /include sur les variables HOSTs

Paramètre de compile , RPGPOPT de la commande du CRTSQLRPGI

  • NONE
    Le compilateur n’est pas appelé pour le prétraitement.
  • LVL1
    Le compilateur est appelé pour le prétraitement pour développer / COPY et gérer les directives de compilation conditionnelle à l’exception de la directive / INCLUDE.
  • LVL2
    Le compilateur est appelé pour le prétraitement pour développer / COPY et / INCLUDE et gérer les directives de compilation conditionnelle.

Le conseil est de forcer le paramètre à *LVL2 pour que même les include soit résolus avant la pré-compilations SQL

4) Les copies conditionnées

Pour éviter les inclusions en double suite à plusieurs inclusions venant de plusieurs endroits

Il y a un macro langage qui permet d’indiquer des instructions dans votre sources RPG

A) dans le source à inclure
source1

les instructions ici
à la fin
/define prototype

B) dans le programme ou on veut l’inclusion

/if not defined( prototype )
/include prototype
/endif

ou

/if defined( prototype )
/eof
/endif

5) Conversion RPGIII vers RPGIV

Pour convertir du RPG3 vers RPGIV ,vous avez une commande IBM qui s’appelle CVTRPGSRC, voici comment traiter les includes.

Il y a 2 méthodes possibles :

A) En précisant le paramètre EXPCPY à *YES de la commande CVTRPGSRC ce qui incluera le /copy dans le programme après l’avoir converti

B) Vous devrez commencer par convertir les /copy de votre application
Attention au nom de fichier que vous devrez éventuellement changer en QRPGLESRC par exemple dans les sources

Conclusion

Il peut être intéressant d’utiliser les includes, mais ça nécessite un minimum d’organisation, exemple pour les prototypages ILE

RDI permet de voir directement les includes à partir du source que vous éditez …