Cette évolution est apportée par la PTF SI51094 (il faut aussi la SF99701 level 26 pour le SQLRPGLE)
Cette mise à jour apporte un format libre complet : plus de spécifications H, F, D et P.
Plus besoin de /free /end-free, les colonnes 6 et 7 à blanc suffisent.
read fichier; |
Donc ces dernières (colonnes 6 et 7) sont encore réservées :
ctl-opt OPTION(*NODEBUGIO : *SRCSTMT) ALWNULL(*USRCTL) ; |
ctl-opt OPTION(*NODEBUGIO : *SRCSTMT) |
DCL-F FICHIER KEYED ; // FICHIER BdeD en lecture par clé |
Type | remarque | équivalent D | paramètres |
BINDEC | binaire "décimal" | B | Bindec(lg [:décimales]) |
CHAR | alphanumérique | A | Char(lg) |
DATE | date | D | Date(format [séparateur]) |
FLOAT | notation scientifique | F | Float(lg) |
GRAPH | DBCS | G | Graph(lg) |
IND | Indicateur | N | |
INT | Binaire (compatible C et API) | I | Int(lg) |
OBJECT | pour Java (JNI) | O | Object(*JAVA : classe) |
PACKED | numérique packé | P | Packed(lg [:décimales]) |
POINTER | pointeur | * | [*PROC] |
TIME | heure | T | Time(format [:séparateur]) |
TIMESTAMP | horodatage | Z | |
UCS2 | Unicode | C | UCS2(lg) |
UNS | binaire non signé | U | Uns(lg) |
VARCHAR | Alphanumérique à taille variable | A + VARYING | Varchar(lg) |
VARGRAPH | DBCS à taille variable | G + VARYING | Vargraph(lg) |
VARUCS2 | Unicode à taille variable | C + VARYING | Varucs2(lg) |
ZONED | Numérique étendu | S | Zoned(lg[:décimales]) |
DCL-S compteur INT(5); DCL-S flag IND; DCL-S message CHAR(30); |
Premier exemple :
DCL-DS Clients QUALIFIED; id INT(10); nom VARCHAR(50); ville VARCHAR(50); cdes LIKEDS(cde_template) DIM(100); nbcdes INT(10); END-DS Clients; |
// exemple INFDS DCL-F fichier DISK(*EXT) INFDS(fichierInfo); DCL-F ecran WORKSTN; |
Les déclarations de fichiers et de variables peuvent être mélangées !
DCL-PR QCMDEXC EXTPGM; |
DCL-PR MaFonction PACKED(5:0) END-PR; |
// fonction, retourne un booléen DCL-PI *N IND END-PI; |
// Pgm avec un paramètre en entrée |
CTL-OPT MAIN(Bonjour) DCL-PROC Bonjour; |
DCL-PROC getCdeSuivante; DCL-PI *N IND EXTPROC(*DCLCASE); commandeDS LIKEDS(commande_t); END-PI; DCL-F cdes STATIC; READ cdes commandeDS; RETURN %eof(cdes); END-PROC getCdeSuivante; |
Exemple avec une procédure
la procédure elle même
Comparaisons
Dwp_date s D Dwp_jour s 1 0 Dundimanche s D inz(D'1980-01-06') Dnbjours s 6 0 c *entry plist c parm wp_date c parm wp_jour |
Dcl-S undimanche Date inz(D'1980-01-06'); Dcl-S nbjours Packed(6:0); |
Pour une fonction (joursemaine, fonction dans un *SRVPGM qui retourne le numéro du jour dans la semaine [1-7] ) :
h nomain |
Ctl-Opt nomain; |
|
Dcl-Ds path_fmt TEMPLATE qualified; CCSID Int(10) inz; pays Char(2) inz(*ALLx'00'); langage Char(3) inz(*ALLx'00'); reserve1 Char(3) inz(*ALLx'00'); typ_indicateur Int(10) inz(0); path_len Int(10); path_delimiter Char(2) inz('/'); reserve2 Char(10) inz(*ALLx'00'); path_name Char(1024); End-Ds;Dcl-Ds chemin_in likeds(path_fmt) inz(*LIKEDS); Dcl-Ds chemin_out likeds(path_fmt) inz(*LIKEDS); |
Ceci n'est pas un documentation mais un simple survol des capacités du produit.
Puis Installer le produit sur votre IBM i
(Aide/Préférence/Arcad Transformer RPG / Product Installation)
saisir la clé
Ensuite vous avez accès à la commande de transformation via RDI/RDP
Ce programme ancien, RPG III
est devenu en RPG IV (résultat de CVTRPGSRC)
A été transformé par le produit d'ARCAD comme cela :
Le programme a été compilé dans QTEMP (pour lire les références croisées) vous devez donc avoir mis en place *LIBL
Les N° de ligne source sont conservés, les colonnes 1 à 5 disparaissent.
Arcad Transformer RPG, transforme la partie déclaration si et seulement si vous avez installé la SI51094 et CVTDCLSPEC(*YES)
Opération | ce code | devient |
indicateur |
|
If *In50; |
%EOF ... | C CLE CHAIN fichier 90 |
CHAIN CLE fichier; |
SETON | C seton LR |
*INLR = '1'; |
COMP | c p2 comp 0 50 |
*IN50 = (p2 = 0); |
GOTO | c debut tag C add 1 I c i comp 100 82 c 82 goto debut |
Dcl-S ATag Char(14); DoU ATag <> 'DEBUT'; // branch when ATag = 'DEBUT' ATag = *Blanks; I += 1; *IN82 = (i < 100); If *In82; ATag = 'DEBUT'; Iter; Endif; EndDo; |
Attention | c debut tag |
Dcl-S ATag Char(14); |
MOVE/L | D anmois s 4 |
|
MOVEA | C MOVEA '010' *IN(80) |
Dcl-S pAToArrStr Pointer; |
C MOVEA 'RPG' TBL(P) |
Dcl-S pAToArrStr Pointer; |
|
KLIST | c CLE1 KLIST c KFLD societe C KFLD NOCLI |
|
PLIST | C CALL 'QCMDEXC' |
Dcl-Pr Pgm_QCMDEXC EXTPGM('QCMDEXC'); Cmd Char(50); Cmdl Packed(15,5); End-Pr; |
|
// Prototype for TESTFREE5 |
|
BITON/ BITOFF |
|
X = %BitOr(X:X'F0'); |
MLLZH/ MLLZO |
|
* n'est pas converti (reste en spécif C) |
Opération | ce code | devient |
SQL | D nbr s 10I 0 |
Dcl-S nbr Int(10); |
Opération | ce code | devient |
Objet | D Statement s O CLASS(*JAVA: |
Dcl-S Statement Object(*Java:'java.sql.Statement'); |
Méthode | D createStatement... |
Dcl-Pr createStatement ExtProc(*JAVA: |
Dernière minute:
La version 9.0.1 de RDI du 10 Décembre 2013 reconnait ces nouveautés :
ici, ctrl+espace ->
La fenêtre structure
Enfin, Avec la TR3 et SI58137 (7.2) ou SI58136 (7.1) vous pouvez maintenant
Membre source (ici de 240c.)
dans l'IFS
Résultat
C'est un package sur le mode tout ou rien, vous devez utiliser **FREE pour commencer colonne 1 et/ou utiliser plus de 80 colonnes.
/free et /end-free sont invalides, les lignes avec spécif aussi.
si vous avez besoin de lignes avec spécifications C (en colonne 6), faites un /COPY
Enfin, si vous faites un /COPY on sort du mode complètement libre (**FREE), sauf si ce dernier contient lui-même **FREE
© Volubis