Nouveautés RPG-IV en V4R20

BoTTom |    Changer de couleur
 
 RPG-IV en V4R40 :
 
 
 ° support des variables de type intéger sur 1 et 8 octets
 
 ° support des thread (JAVA et DOMINO utilisent cette notion)
 
 ° support de UNICODE et fonction associée %GRAPH et %UCS2.
 
 ° nouvelles options de compilation (liées au DEBUG particulièrement)
 
 ° nouvelles fonctions intégrées %DIV, %REM et %XFOOT
 
 ° nouveaux ordres FOR/ENDFOR, LEAVESR et EVALR
 
 ° et diverses nouveautés liées aux spécif D
 
 
 
 
 


|    Changer de couleur
 
 Support du multi-threading
 
    un thread est une Tâche autonome à l'intérieur d'une session
 
       (seul le compilateur C et JAVA connaissent cette notion)
 
    avec THREAD(*SERIALIZE) votre pgm GAP supporte de travailler
         avec des programes utilisant cette notion.
 
 
 Nouveaux type de variables
 
    3I et  3U (auparavant seules les lg 5 et 10 étaient acceptées)
   20I et 20U
 
   rappel :      I = Integer  (binaire) : mêmes possibilités que le C
                 U = Unsigned (binaire non signé)
 
 
     C        pour le support des données UNICODE (spécif D, I et O)
 


|    Changer de couleur
 
 Nouveaux mots-clés
 
 Spécif H
 
 
 + 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.
 


|    Changer de couleur
 
 + 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 de&éfaut pour les calculs en binaire
 
 + OPENOPT(*NOINZOFL | *INZOFL)
 
    indique si l'indicateur d'Overflow doit être remis à *OFF (*INZOLF) ou
      non lrs d'un OPEN sur le PRTF.
 
 + THREAD(*SERIALIZE)
 
    indique que ce pgm est compatible avec les threads.


|    Changer de couleur
 
 Spécif D
 
 + INZ(*EXTDFT)
                       la valeur initiale pour cette zone est la valeur
                        par défaut définie dans la base de données.
 
 + INZ(*USER)
                       la valeur initiale  pour cette zone est le profil
                        utilisateur en cours.
 
 + OVERLAY(nom-de-zone:*NEXT)
 
                       permet de découper une variable d'une DS SANS JAMAIS
                       figer les positions relatives à cette dernière.
 
   exemple :  D codepost       5  0
              D   dept         2  0       OVERLAY(codepost)
              D   bdist        3  0       OVERLAY(codepost:*NEXT)
 
   dept  redéfini codepost (sous entendu à partir de 1)
   bdist redéfini codepost (sous entendu à la suite de dept, soit 3)


|    Changer de couleur
 
 + CCSID( n° | *DFT)
 
    définition du N° de CCSID pour les données UNICODE
 
 
 Spécif C      nouvelles fonctions
 
 
 %GRAPH
 
               convertit en graphique (DBCS) des données EBCDIC,
                 DBCS (changement de CCSID) ou UNICODE
 
 
 %UCS2
              convertit en UNICODE des données EBCDIC, DBCS
                ou UNICODE (avec changement de CCSID).
 
 
 
 


|    Changer de couleur
 
 %XFOOT
               fait la somme des élements d'un tableau
 
                        eval total = %xfoot(salaire) + prime
 
 %DIV 
               réalise la division de deux arguments sans décimales
 
                        eval resultat = %div(ca : 12)
 
 %REM 
               retourne le reste de la divisdion
 
                        eval reste = %rem(ca : 12)
 
 
                        if   %rem(annee : 4 ) = 0
 
                        ....
 
                        endif


|    Changer de couleur
 
 Nouveaux ordres :
 
 EVALR           indentique à EVAL (réalisation d'une expression) mais
                  le résultat est cadré à DROITE (comme MOVE)
 
 LEAVESR         sortie anticipée du sous programe en cours
 
 
 FOR            réalisation d'une boucle en faisant varier un indice
 
 
                FOR     indice [= val. de départ]
                               [BY incrément]
                               [TO val. maxi | DOWNTO val. mini]
 
                 ...
 
                ENDFOR
 
  valeur de départ et incrément sont par défaut de 1.
  valeur limite est par défaut *HIVAL


|    Changer de couleur
 
  comme avec le DO, des indicateurs peuvent être utilisés
 
  un indicateur sur l'ordre FOR contitionne l'ensembel du traitement
 
  un indicateur sur le ENDFOR conitionne la REPETITION (comme DO)
 
 
 Quelques exemples :
 
     C                   eval      factoriel = 1
     C                   FOR       i = 1 to n
     C                   eval       factoriel = factoriel * i
     C                   ENDFOR
 
      * recherche du dernier car. non blanc
     C                   FOR       i = %len(raisoc) downto 1
     C                   if         %subst(raisoc : i : 1) <> ' '
     C                   leave
     C                   endif
     C                   ENDFOR
 





©AF400