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 |
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) |
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. |
+ 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. |
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) |
+ 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). |
%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 |
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 |
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 |