Vous connaissez les directives de compilation du GAP : directives liées à la présentation de la liste de compilation. 67++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /TITLE titre de chaque page /EJECT (saut de page) /SKIPx (saut de lignes [x étant compris entre 1 et 3].) directive de copie de source (ressemblant à un "include") : /COPY copie d'un autre membre source : /COPY [bib/]fichier,membre les /COPY multiples et imbriqués sont maintenant admis avec le mot-clé COPYNEST() en spécif H |
pour éviter les copies itératives (en boucle) et les doubles définitions les directives suivantes sont admises : 67++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /DEFINE nom-condition définition d'un nom qui rendra vrai le test /IF DEFINE(nom) /UNDEFINE nom-condition la condition est enlevée. /IF DEFINED(nom) /IF NOT DEFINED(nom) test sur un nom-condition. /ENDIF fin du test |
/ELSEIF DEFINED(nom) /ELSEIF NOT DEFINED(nom) tests imbriqués /ELSE si tous les tests précédents sont faux /EOF considérer la fin du fichier source comme atteinte quelques règles : 1/ A chaque /IF doit correspondre un /ENDIF 2/ les directives /ELSEIF et /ELSE ne sont valides qu'à l'intérieur d'un test 3/ un ordre /ELSEIF n'est pas admis après un ordre /ELSE |
Exemple d'utilisation: /If Not Defined( MaFonction ) /Define maFonction /Else /Eof /EndIf * * * procédure de "MaFonction" * * D MaFonction PR D La commande de compil (CRTRPGMOD) contient un paramètre DEFINE, permettant de définir un nom-condition à la compil.(notion de version par exemple) |
Et enfin, la V5R10 ammène les conditions suivantes : *ILERPG : vrai si vous utilisez le compilateur RPG faux si vous utilisez VisualAge RPG *CRTBNDRPG : vrai si vous utilisez la cde CRTBDNRPG faux dans la cas contraire (CRTRPGMOD puis CRTPGM) *CRTRPGMOD : vrai si vous utilisez la cde CRTRPGMOD faux dans la cas contraire (CRTBNDRPG) *VxRyMz : vrai si vous êtes au niveau de version VxRyMz (disponible depuis la V4R4M0 avec SF65716) par exemple : /If Defined( *crtrpgmod ) H DFTACTGRP(*no) ACTGRP(xxxx) /endif H OPTION(*srcstmt : *nodebugio) |
Attention en ce qui concerne les ordres /COPY et /EOF dans des sources SQLRPGLE.le pré-compilateur traite les ordres SQL puis exécute les /COPY et enfin appel le compilateur RPG qui recoit un seul source (ou les copies sont déja faite). malheureusement, le pré-compilateur ne traite pas les /IF et /EOF qui sont donc transmis tel quel au compilateur RPG. le compilateur RPG rencontrant un ordre /EOF arrète , non pas la copie (elle est déja faite) , mais la lecture du source, c.a.d la compilation. Pour remédier à ce problème, utilisez un nouvel ordre : /INCLUDE. il est identique au /COPY sauf qu'il est ignoré du pré-compilateur SQL et sera traité uniquement par le compilateur RPG. il est disponile en V4R50 (en standard) et V4R40 via ptf SF61918 |