ILE / RPG-IV Historique du GAP : GAP II ==> IBM 34 , 36 GAP III ==> IBM 38 RPG/400 ==> AS/400 en V2R30, IBM propose un nouveau concept, ILE, permettant de mieux intégrer certains langages. particulièrement le C. en V3R10, trois nouveaux compilateurs sont à la norme ILE (RPG, COBOL, CL) en même temps le RPG subit de profondes transformations de structure et de syntaxe pour devenir le RPG 4. |
la structure générale d'un programme RPG-IV est la suivante : (ce n'est plus HFELICO) mais HFDICO H F D I C O **FTRANS <---> source de conversion pour les fichiers lus. (mot-clé FTRANS / H) **ALTSEQ <---> source de la table de tri (mot-clé ALTSEQ / H) **CTDATA <---> source des tableaux chargés à la compile. (mot-clé CTDATA / D) Si vous utilisez les codes **FTRANS, **ALTSEQ, **CTDATA l'ordre d'apparition des lignes sources n'importe pas. Sinon, vous devez respecter l'ordre indiqué ci-dessus. |
Spécification de contrôle en RPG-IV (spécif H) ! RPG-IV ! Valeur ! !---------!----------------------------! ! 6 ! H ! ! ! ! ! 7-80 ! Mots-clés (format libre) ! ! ! ! !---------!----------------------------! Si le source ne contient aucune spécif H, le compilateur cherche une data area nommée 1/ RPGLEHSPEC dans *LIBL 2/ DFTLEHSPEC dans QRPGLE Si aucune data area n'est trouvée, RPG assume des valeurs par défaut (voir les valeurs par défaut, mot-clé par mot-clé). La spécification de contrôle peut occuper plusieurs lignes Un mot-clé peut être scindé sur plusieurs lignes (sans marque de continuation) |
Exemples : *.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+. HKeywords++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ H ALTSEQ(*EXT) CURSYM('$') DATEDIT(*MDY) DATFMT(*MDY/) DEBUG(*YES) H DECEDIT('.') FORMSALIGN(*YES) FTRANS(*SRC) DFTNAME(name) H TIMFMT(*ISO) HKeywords++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ H ALTSEQ( H *EXT H ) Mots-clés : + ALTSEQ(*NONE *SRC *EXT) séquence alternée. Il s'agit du critère de tri/comparaison utilisée par IF, COMP, SORTA, ... *NONE (ou mot-clé absent) = séquence de classement normale *SRC (ou sans paramètre) = séquence de classement indiquée dans le source *EXT = SRTSEQ et LANGID de la commande CRTRPGxxx |
Avec ALTSEQ(*SRC) le compilateur ira chercher le source de la table de tri en fin de source. 1 à 6 ALTSEQ 7 10 à blanc 11 12 valeur héxa du caractère d'origine 13 14 valeur héxa du caractère de remplacement .... et ainsi de suite **ALTSEQ ALTSEQ 81C182C2.... + CURSYM('x') où x est le symbole monétaire + DATEDIT(format<séparateur>) format d'édition de la date Représente le format d'édition des variables numériques avec edit-code Y formats valides : *YMD, *MDY, *DMY séparateur par défaut : '/' (& = l'espace) |
+ DATFMT(format<séparateur>) format par défaut des variables date. formats valides : *YMD,*MDY,*DMY,*JUL - *ISO,*USA,*EUR,*JIS séparateurs : <--- au choix ----> <---- imposé -----> + DEBUG(*NO/*YES) rend actif (*YES) le code opération "DUMP". + DECEDIT('x') format d'édition des données numériques. il n'y a plus de dépendance avec le format de la date. '.' 123/1000 = .123 <- défaut ',' = ,123 '0.' = 0.123 '0,' = 0,123 + DFTNAME(nom) nom du programme ou module si non précisé, RPG utilise les paramètres de CRTRPGxxx + FORMSALIGN(*NO/*YES) *YES fait que le système demande de vérifier l'alignement lors de l'impression d'une spécif O conditionnée par 1P. |
+ FTRANS(*NONE/*SRC) conversion des fichiers. FTRANS(*SRC) fait référence à une spécif **FTRANS en fin de source, indiquant les caractères à convertir pour un ou plusieurs fichiers (il y a aussi conversion de l'argument utilisé par CHAIN,SETLL,...) 1 à 8 *FILES conversion s'appliquant à tous les fichiers 1 à 8 nom de fichier conversion s'appliquant à un fichier particulier (le nom est celui utilisé en Spécif F). 9 10 à blanc 11 12 valeur héxa du caractère d'origine 13 14 valeur héxa du caractère de remplacement .... et ainsi de suite ! **FTRANS ! ou **FTRANS *FILES 81C182C2.... ! FIC01 81C182C2.... ! FIC02 F1C1F2C2.... + TIMFMT(format<séparateur>) format par défaut des variables heure formats valides : *HMS - *ISO,*USA,*EUR,*JIS séparateurs : ! <---- imposé -----> !-> au choix |
Mots-clés des versions V3R60 / V3R20 : + NOMAIN (sans paramètres) : source ne contenant que des procédures. n'ayant pas de programme principal, il n'y aura pas de cycle généré par le compilateur (c'est une première) + COPYRIGHT('votre signature') génère un copyright dans le programme ou le programme de service. Mots-clés en V3R70 : + COPYNEST(1 -2048) support des /COPY imbriqués + EXPROPTS( ) précision des variables intermédiaires. *MAXDIGITS : nombre maximal de chiffres après la virgule. *RESDECPOS : même précision de la variable résultat + FLTDIV(*NO ! *YES) indique si les divisions (dans les expressions) sont faites en notation scientifique. |
Nouveaux mots-clés en spécif H V4R20 : (pratiquement tous les paramètres des commandes de création sauf DBGVIEW) + ACTGRP définition du groupe d'activation ACTGRP(*NEW + un nouveau groupe est créé à chaque appel *CALLER + appartient au même groupe que le pgm appellant un-nom) + appartient au groupe indiqué + DFTACTGRP appartenance (ou non) au groupe d'activation par dft. DFTACTGRP(*YES | *NO) + ALWNULL support (ou non) des valeurs nulles ALWNULL(*NO + pas de support des valeurs nulles (dft) *INPUTONLY + en lecture uniquement *USRCTL) + support et gestion de la fonction %NULLIND() |
+ BNDDIR référence à un répertoire de liage indiquant la liste des programmes de service utilisables. ce mot-clé est invalide avec DFTACTGRP(*YES) BNDDIR(répertoire1(:répertoire2:(répertoire3))) il est possible de qualifier chaque répertoire de liage + CVTOPT options de conversion CVTOPT(*DATETIME + support des variables date/heure (dft) *NODATETIME + pas de support des variables date/heure *VARCHAR + support des variables à lg variable (dft) *NOVARCHAR + pas de support des variables à lg variable (elles sont transformées à lg fixe) *GRAPHIC | *NOGRAPHIC variables DBCS à lg fixe *VARGRAPHIC | *NOVARGRAPHIC) variables DBCS à lg variable |
+ COPYNEST support des /COPY imbriqués on appelle copie imbriquée, la copie d'un membre source contenant lui-même un ordre /COPY. COPYNEST(20) 20 niveaux admis. + ENBPFRCOL Accepter les collectes de performances ENBPFRCOL(*PEP + collecte les performances pour les appels et retours de programme *ENTRYEXIT + collecte les performances pour les appels et retours de toutes les procédures *ENTRYEXIT) + collecte des performances complète + PFRDTA collecte de statistiques pour profilage du programme le profilage de programme est une technique qui consiste à réorganiser les procédures en fonction de statistiques d'utilisation,avec OPTIMIZE(*FULL). PFRDTA(*COL | *NOCOL) |
+ EXTBININT Format des zones externes binaires EXTBININT(*NO + les zones binaires sont transformées en B (maxi 9999 sur 2 octets) *YES) + les zones binaires sont laissées en I (maxi 32767 sur 2 octets) + FIXNBR correction des données numériques invalides si vous choisissez la correction, les blancs et les chiffres invalides sont remplacés par zéro, les signes invalides par + . FIXNBR(*ZONED | *NOZONED > sur le numérique étendu *INPUTPACKED | *NOINPUPACKED) > sur le numérique packé + GENLVL niveau de gravité empéchant la création du pgm. GENLVL(20) |
+ INDENT indentation du source INDENT('--') + LANGID code langage LANGID(*JOBRUN code langage du JOB qui exécute *JOB code langage du JOB qui compile 'FRA') code langage français + SRTSEQ séquence de tri SRTSEQ(*HEX | *JOB | *JOBRUN | *LANGIDUNQ | *LANGIDSHR | 'table-de-tri') + OPTIMIZE niveau d'optimisation OPTIMIZE(*NONE pas d'optimisation *BASIC optimisation de base *FULL) optimisation complète |
+ OPTION options de compilation OPTION(*XREF | *NOXREF production des références croisées *GEN | *NOGEN génération du programme *SECLVL | *NOSECLVL impression des messages de second niveau *SHOWCOPY | *NOSHOWCOPY impression des /COPY *EXPDDS | *NOEXPDDS impression des descriptions externes *SHOWSKP | *NOSHOWSKP) impression des lignes sources ignorées (à cause des directives de compil) + TEXT('votre texte') texte du programme + TRUNCNBR en cas de dépassement de capacité, génération d'une erreur ou troncature. TRUNCNBR(*NO | *YES) + USRPRF profil de référence USRPRF(*USER le profil de référence en ce qui concerne la gestion des droits est l'utilsateur seul. *OWNER) les droits du propriétaires du programme s'ajoutent à ceux de l'utilisateur. |
Nouveaux mots-clés en spécif H V4R40 : + OPTION(*SRCSTMT | *NOSRCSTMT) avec *SRCSTMT le compilateur génère une table de DEBUG ou chaque instruction porte le N° de ligne source avec *NOSRCSTMT les lignes dans l'objet sont numérotées en séquence + OPTION(*DEBUGIO | *NODEBUGIO) avec *DEBUGIO le compilateur génère dans la table de DEBUG une ligne par spécif I (ou O). ainsi un READ peut entrainer 10 points d'arret (ou plus) en mode pas à pas. avec *NODEBUGIO, un READ entraine UN SEUL point d'arret. |
+ CCSID(*GRAPH : *IGNORE | *SRC | n°) indique le CCSID DBCS par défaut pour le module. + CCSID(*UCS2 : n°) indique le CCSID UNICODE par défaut pour le module (dft = 13488) + INTPREC(10 | 20) indique la précision par défaut pour les calculs en binaire + OPENOPT(*NOINZOFL | *INZOFL) indique si l'indicateur d'Overflow doit être remis à *OFF (*INZOLF) ou non lors d'un OPEN sur le PRTF. + THREAD(*SERIALIZE) indique que ce pgm est compatible avec les threads (Java). |