Moderniser votre code RPG avec Agilité – Partie 1
lun 30 décembre 2019Du RPG III au RPG IV – CVTRPGSRC
Vous savez que plusieurs versions de langages RPG peuvent cohabiter sur IBM i et qui sont présent depuis OS400 (Voir IBM 36, mais ici nous n’irons pas si loin). C’est pourquoi sur ces OS, vous trouvez du RPG III, RPG IV, RPG Ile, RPG Free-form ou du RPG Full-free.
Aujourd’hui, il n’existe pas encore de produit gratuit qui va vous convertir un source de RPG III à RPG Full-free. Il va falloir monter progressivement de version.
Les difficultés sont multiples, la structure de codage diffère, monobloc sur les plus vieilles versions vers du refactoring de plus en plus fin avec les plus modernes. L’usage de sous-routines est remplacé par celui de sous-procédure par exemple qui seront externalisées dans d’autres membres sources ou fichiers texte hébergés sur l’IFS. Les mots-clefs des anciennes versions de RPG n’auront pas toujours d’équivalent dans les plus récentes. Et il y a bien sûr d’autres raisons.
Le premier niveau que nous allons voir est le plus simple, passer de RPG III à RPG IV. Par chance, IBM a fourni une commande CL pour le faire simplement :
CVTRPGSRC
Voici une exemple d’utilisation de cette commande sur le source ci-dessous.
CVTRPGSRC FROMFILE(BIBORI/QRPGSRC) FROMMBR(PGM0001R) TOFILE(BIBDEST/QRPGLESRC)
     H
      * FICHIER CLIENT
      *---------------
     FBNCLTL01IF  E           K        DISK
      *
      * ADRESSE CLIENT
      *---------------
     FBACLTL02IF  E           K        DISK
      *----------------------------------------------------*
      * PARAMETRES                                         
      *----------------------------------------------------*
     C           *ENTRY    PLIST                           
     C                     PARM           $ODCLI  8        
     C                     MOVE $ODCLI    CODCLI           
      *----------------------------------------------------
      * CLES                                               
      *----------------------------------------------------
     C           CLTL02    KLIST                           
     C                     KFLD           CODCLI           
     C                     KFLD           ACATEG           
      *                                                    
      *----------------------------------------------------
      * INITIALISATIONS                                    
      *----------------------------------------------------
     C                     Z-ADD20        SATJOU           
     C                     Z-ADDUYEAR     AATJOU           
     C                     Z-ADDUMONTH    MATJOU           
     C                     Z-ADDUDAY      JATJOU           
     C                     MOVE '/'       SLASH1           
     C                     MOVE '/'       SLASH2           
     C                     MOVE '-'       TIRET1           
     C                     MOVE '/'       SLASH3           
       * RECHERCHE CLIENT                                  
     C           CODCLI    CHAINBNCLTL01             60    
      * RECHERCHE ADRESSE CLI                              
     C                     MOVE 'CLI'     ACATEG           
     C           CLTL02    CHAINBACLTL02             60    
     C  N60      NIDEAD    CHAINBACISL01             60    
     C           *IN60     IFEQ '0'                        
     C                     MOVE ALIGN3    CLIGN3           
     C                     MOVE ALIGN4    CLIGN4           
     C                     MOVE ALIGN5    CLIGN5           
     C                     MOVE ALIGN6    CLIGN6           
     C                     ENDIF                           
Voici la version RPG IV résultante, vous remarquerez assez peu de différence car les mots du RPG III ont leurs équivalents en RPG IV.
La position des colonnes aura changé, les mot-clefs seront un peu différents mais vous ne serez pas « encore » dépaysé. Vous retrouvez les colonnes, les indicateurs, le cycle etc…
    H
      * FICHIER CLIENT
      *---------------
     FBNCLTL01  IF   E           K DISK
      *
      * ADRESSE CLIENT
      *---------------
     FBACLTL02  IF   E           K DISK
      *----------------------------------------------------*
      * PARAMETRES                                         
      *----------------------------------------------------*
     C     *ENTRY        PLIST                               
     C                   PARM                    $ODCLI            8     
     C                   MOVE      $ODCLI        CODCLI                  
      *----------------------------------------------------
      * CLES                                               
      *----------------------------------------------------
      *                                                    
     C     CLTL02        KLIST                                        
     C                   KFLD                    CODCLI               
     C                   KFLD                    ACATEG               
      *----------------------------------------------------
      * INITIALISATIONS                                    
      *----------------------------------------------------
     C                   Z-ADD     20            SATJOU          
     C                   Z-ADD     UYEAR         AATJOU          
     C                   Z-ADD     UMONTH        MATJOU           
     C                   Z-ADD     UDAY          JATJOU            
     C                   MOVE      '/'           SLASH1             
     C                   MOVE      '/'           SLASH2            
     C                   MOVE      '-'           TIRET1          
     C                   MOVE      '/'           SLASH3                     
       * RECHERCHE CLIENT                                   I
     C     CODCLI        CHAIN     BNCLTL01                           60     
      * RECHERCHE ADRESSE CLI                              I
     C                   MOVE      'CLI'         ACATEG                         
     C     CLTL02        CHAIN     BACLTL02                           60       
     C  N60NIDEAD        CHAIN     BACISL01                           60        
     C     *IN60         IFEQ      '0'                                          
     C                   MOVE      ALIGN3        CLIGN3                         
     C                   MOVE      ALIGN4        CLIGN4                         
     C                   MOVE      ALIGN5        CLIGN5                         
     C                   MOVE      ALIGN6        CLIGN6                         
     C                   ENDIF                                                 Il n’y a plus qu’à…

[…] Moderniser votre code RPG avec Agilité – Partie 1 […]
[…] Moderniser votre code RPG avec Agilité – Partie 1 […]
[…] Moderniser votre code RPG avec Agilité – Partie 1 […]
[…] Moderniser votre code RPG avec Agilité – Partie 1 […]