les codes-opération RPG IV

BoTTom |    Changer de couleur
     Codes opération  RPG-IV  
                                ER =Erreur FD =Found NF =not found B = blanc
                                NR =no record EOF =end of file BOF =begin
 ...........................................................................
 : f = /free : une colonne à blanc= non renseignable                       :
 :  accepté. : renseignée = obligatoire, ( ) = facultatif                  :
 ...........................................................................
 :  Code     :   Facteur 1     :  Facteur 2      : zone result : > : < : = :
 :...........:.................:.................:.............:...:...:...:
 :f ACQ      : nom d'unité     : fichier WORKSTN :             :   :ER :   :
 :  ADD      : (zone)          : zone            : somme       : + : - : 0 :
 :  ADDDUR   : date/heure      : durée:code      : date/heure  :   :ER :   :
 :  ALLOC    :                 :  longueur       : pointeur    :   :ER :   :
 :  ANDxx    : opérande        : opérande        :             :   :   :   :
 :f BEGSR    : sous-pgm        :                 :             :   :   :   :
 :  CABxx    : opérande        : opérande        : label       : > : < : = :
 :  CALL     :                 : nom de pgm      : (plist)     :   :ER :LR :
 :  CALLB(D) :                 : procedure/point.: (plist)     :   :ER :LR :
 :  CASxx    : opérande        : opérande        : sous-pgm    : > : < : = :
 :  CAT(P)   : chaîne-1        : chaîne-2(:nb' '): chaîne-3    :   :   :   :
 :f CHAIN(N) : argument        : fichier ou fmt  : (DS)        :NR :ER :   :
 :...........:.................:.................:.............:...:...:...:


|    Changer de couleur
 ...........................................................................
 :  Code     :   Facteur 1     :  Facteur 2      : zone result : > : < : = :
 :...........:.................:.................:.............:...:...:...:
 :  CHECK    : chaîne          : argument(:pos)  : (position)  :   :ER :FD :
 :  CHECKR   : chaîne          : argument(:pos)  : (position)  :   :ER :FD :
 :f CLEAR    : (*NOKEY)        : structure/fmt   :             :   :   :   :
 :f CLOSE    :                 : fichier/*ALL    :             :   :ER :   :
 :f COMMIT   : (frontière)     :                 :             :   :ER :   :
 :  COMP     : opérande        : opérande        :             : > : < : = :
 :f DEALLOC(N)                 :                 : pointeur    :   :ER :   :
 :  DEFINE   : *LIKE           : zone référencée : zone définie:   :   :   :
 :   " "     : *DTAARA         : nom data-area   : nom-pgm     :   :   :   :
 :f DELETE   : (argument)      : nom fichier     :             :NR :ER :   :
 :  DIV(H)   : divisé          : diviseur        : quotient    : > : < : = :
 :  DO       : val-départ      : val-limite      : index       :   :   :   :
 :  DOUxx    : opérande        : opérande        :             :   :   :   :
 :  DOWxx    : opérande        : opérande        :             :   :   :   :
 :f DSPLY    : message-id      : message-queue   : (réponse)   :   :ER :   :
 :f ELSE     :                 :                 :             :   :   :   :
 :f ELSEIF   :                 :                 :             :   :   :   :
 :  END      :                 : incrément (do)  :             :   :   :   :
 :...........:.................:.................:.............:...:...:...:


|    Changer de couleur
 ...........................................................................
 :  Code     :   Facteur 1     :  Facteur 2      : zone result : > : < : = :
 ...........................................................................
 :  ENDCS    :                 :                 :             :   :   :   :
 :f ENDDO    :                 : incrément       :             :   :   :   :
 :f ENDIF    :                 :                 :             :   :   :   :
 :f ENDSL    :                 :                 :             :   :   :   :
 :f ENDSR    : (label))        : (retour)        :             :   :   :   :
 :f EXCEPT   :                 : nom-specif O    :             :   :   :   :
 :f EXFMT    :                 : format          :             :   :ER :   :
 :f EXSR     :                 : sous-programme  :             :   :   :   :
 :  EXTRCT   :                 : date/heure:code : résultat    :   :   :   :
 :f FEOD     :                 : fichier         :             :   :ER :   :
 :  GOTO     :                 : label           :             :   :   :   :
 :  IFxx     : opérande        : opérande        :             :NR :ER :   :
 :f IN       : (*LOCK)         : data area       :             :   :ER :   :
 :f ITER     :                 :                 :             :   :   :   :
 :  KFLD     :                 :                 : zone clé    :   :   :   :
 :  KLIST    : nom-klist       :                 :             :   :   :   :
 :f LEAVE    :                 :                 :             :   :   :   :
 :f LEAVESR  :                 :                 :             :   :   :   :
 ...........................................................................


|    Changer de couleur
 ...........................................................................
 :  Code     :   Facteur 1     :  Facteur 2      : zone result : > : < : = :
 ...........................................................................
 :  LOOKUP   : (tableau)       : argument        : tableau     : > : < : = :
 :f MONITOR  :                 :                 :             :   :   :   :
 :  MOVE(P)  : (fmt date/heure): origine         : résultat    : + : - :0,B:
 :  MOVEL(P) : (fmt date/heure): origine         : résultat    : + : - :0,B:
 :  MOVEA    :                 : zone/tableau    : zone/tableau: + : - :0,B:
 :  MULT     : multiplié       : multiplicateur  : résultat    : + : - :0,B:
 :  MVR      :                 :                 : reste       : + : - :0,B:
 :  OCCUR    : (occurence)     : nom DS          : (résultat)  :   :ER :   :
 :f OPEN     :                 : fichier         :             :   :ER :   :
 :f ON-ERROR :                 : code(s) erreur  :             :   :   :   :
 :  ORxx     : opérande        : opérande        :             :   :   :   :
 :f OTHER    :                 :                 :             :   :   :   :
 :f OUT      : (*LOCK)         : data area       :             :   :ER :   :
 :  PARM     : (retour)        : (envoi)         : paramètre   :   :   :   :
 :  PLIST    : nom plist       :                 :             :   :   :   :
 :f READ(N)  :                 : fichier/fmt     : (DS)        :   :ER :EOF:
 :f READC(N) :                 : format          :             :   :ER :EOF:
 :f READE(N) : (argument)      : fichier/fmt     : (DS)        :   :ER :EOF:
 ...........................................................................


|    Changer de couleur
 ...........................................................................
 :  Code     :   Facteur 1     :  Facteur 2      : zone result : > : < : = :
 ...........................................................................
 :f READP(N) :                 : fichier/fmt     : (DS)        :   :ER :BOF:
 :f READPE(N): (argument)      : fichier/fmt     : (DS)        :   :ER :BOF:
 :  REALLOC  :                 :  longueur       : pointeur    :   :ER :   :
 :f REL      : unité           : fichier         :             :   :ER :   :
 :f RESET    : (*NOKEY)        : structure/fmt   : résultat    :   :ER :   :
 :f RETURN   :                 :                 :             :   :   :   :
 :f ROLBK    :                 :                 :             :   :ER :   :
 :  SCAN     : argument(:lg)   : chaîne(:pos)    : résultat    :   :   :FD :
 :f SELECT   :                 :                 :             :   :   :   :
 :f SETGT    : argument        : fichier/fmt     :             :NR :ER :   :
 :f SETLL    : arg(*START/*END): fichier/fmt     :             :NR :ER :FD :
 :  SETOFF   :                 :                 :             :-- :-- :-- :
 :  SETON    :                 :                 :             :-- :-- :-- :
 :f SORTA    :                 : tableau         :             :   :   :   :
 :  SUB      : (val.origine)   : val.enlevée     : résultat    :   :   :   :
 :  SUBDUR   : date/heure      : durée:code      : date/heure  :   :ER :   :
 :   ou      : date/heure      : date/heure      : durée:code  :   :ER :   :
 :  SUBST(P) : lg à extraire   : chaîne(:pos)    : résultat    :   :ER :   :
 ...........................................................................


|    Changer de couleur
 ...........................................................................
 :  Code     :   Facteur 1     :  Facteur 2      : zone result : > : < : = :
 ...........................................................................
 :  TAG      : label           :                 :             :   :   :   :
 :  TESTN    :                 :                 : var-char    :NU :BN :BL :
 :f TEST(D|  :  format         :                 : date ou     :   :ER :   :
 :   T|Z [E]):     à vérifier  :                 : char ou num.:   :ER :   :
 :  TIME     :                 :                 : résultat    :   :   :   :
 :f UNLOCK   :                 : fichier/D-A     :             :   :ER :   :
 :f UPDATE   :                 : fichier/fmt     : (DS)        :   :ER :   :
 :  WHENxx   : opérande        : opérande        :             :   :   :   :
 :f WRITE    :                 : fichier/fmt     : (DS)        :   :ER :EOF:
 :  XFOOT    :                 : tableau         : somme       : + : - : 0 :
 :  XLATE    : de:à            : chaîne(:pos)    : résultat    :   :ER :FD :
 :  Z-ADD    :                 : val. ajoutée    : résultat    : + : - : 0 :
 :  Z-SUB    :                 : val. soustraite : résultat    : + : - : 0 :
 :...........:.................:.................:.............:...:...:...:
 
  les tests logiques "xx" sont :   . EQ (=)    . LT (<)    . GT (>)
                                   . LE (<=)   . GE (>=)   . NE (<>)
 
 (N) avec DEALLOC = assignation de la valeur nulle au pointeur.(V3R70)


|    Changer de couleur
  Ces ordres sont valides en facteur 2 étendu ET en format libre, uniquement
 ...........................................................................
 :  Code     :                 :  Facteur 2 étendu                         :
 ...........................................................................
 :  CALLP(E) :                 : pgm(param1 : param2: param3 : ....)       :
 :  DOU      :                 : (expression logique)                      :
 :  DOW      :                 : (expression logique)                      :
 :  EVAL(H)  :                 : résultat = expression en format libre     :
 :  EVALR(H) :                 : résultat = expression en format libre     :
 :  IF       :                 : (expression logique)                      :
 :  WHEN     :                 : (expression logique)                      :
 :  FOR      :                 : i= départ BY incr. TO maxi | DOWNTO mini  :
 :  ENDFOR   :                 :                                           :
 :  ENDIF    :                 :                                           :
 :  ENDDO    :                 :                                           :
 ...........................................................................
 la V3R70 apporte aux ordres EVAL, EVALR les extensions M et R
 
 (M) sur un calcul = calcul avec precision maximale
 (R)  "      "     = calcul avec la précision de la variable résultat
 
 la V4R20, l'option E, offrant une gestion d'erreur à l'instruction


|    Changer de couleur
 ...........................................................................
 : Proposition de remplacement des codes invalides en format libre         :
 ...........................................................................
 :  Code     :   remplacement  :  Exemple                                  :
 :...........:.................:.................:.............:...:...:...:
 :  ADD      :  +              : EVAL A = A +1 ou A = A+1 ou   A+=1        :
 :  ADDDUR   :  +              : datliv = datcmd + %DAYS(45)               :
 :  ALLOC    :  %Alloc         :                                           :
 :  ANDxx    :  (test libre)   : if A=B AND compteur<>0                    :
 :  CABxx    :                 :                                           :
 :  CALL     : CALLP + EXTPGM  : CALLP pgmA (parm1 : parm2)                :
 :  CALLB(D) : CALLP + EXTPROC :  "                                        :
 :  CASxx    : IF / EXSR       :                                           :
 :  CAT(P)   :  +              : Message = 'date de traitement' + DATCHAR  :
 :  CHECK    : %check          : pos = %check('0123456789-+,' : qtechar)   :
 :  CHECKR   : %checkr         :  "                                        :
 :  COMP     : IF              :                                           :
 :  DEFINE   : *LIKE           : déclaration en D avec LIKE( )             :
 :   " "     : *DTAARA         : déclaration en D avec DTAARA( )           :
 :  DIV(H)   :  /              :                                           :
 :  DO       : FOR départ      : for i=1 to 50                             :
 :...........:.................:.................:.............:...:...:...:


|    Changer de couleur
 ...........................................................................
 :  Code     :   remplacement  :  Exemple                                  :
 ...........................................................................
 :  DOUxx    : DOU             : DOU %eof                                  :
 :  DOWxx    : DOW             : DOW not %eof                              :
 :  END      : ENDxx           :                                           :
 :  ENDCS    : cf CAS          :                                           :
 :  EXTRCT   : %SUBDT          : mois = %SUBDT(DATCMD : *M)                :
 :  GOTO     :                 :                                           :
 :  IFxx     : IF              : if GAP = 4                                :
 :  KFLD     : %KDS ou (K1 :K2): CHAIN (societe: nocli) clientf1           :
 :  KLIST    :                 :                                           :
 :  LOOKUP   : %lookup         : tva = %lookup(code : tbtva)               :
 :  MOVE(P)  : conversion      : datcmd = %DATE(datchar:*ISO)              :
 :  MOVEL(P) :                 :  ou Datchar = %CHAR(datcmd), etc...       :
 :  MOVEA    : (%subarr ?)     :                                           :
 :  MULT     :  *              :                                           :
 :  MVR      : %rem            : if %rem(AN : 4) = 0                       :
 :  OCCUR    : %occur          :                                           :
 :  ORxx     : cf ANDXX        :                                           :
 :  PARM     : prototype       : déclaration en spécif D pour CALLP        :
 ...........................................................................


|    Changer de couleur
 ...........................................................................
 :  Code     :   remplacement  :  Exemple                                  :
 ...........................................................................
 :  PLIST    : cd PARM         :                                           :
 :  REALLOC  : %reallaoc       :                                           :
 :  SCAN     : %scan           : QUATRE = %scan('4' : 'RPG4')              :
 :  SETOFF   : *inxx = *off    :                                           :
 :  SETON    : *inxx = *on     :                                           :
 :  SUB      :  -              :                                           :
 :  SUBDUR   :  -              : HIER = AUJOURDHUI - %days(1)              :
 :   ou      : %DIFF           : UN = %DIFF(aujourdhui : hier)             :
 :  SUBST(P) : %subst          :                                           :
 :  TAG      :                 :                                           :
 :  TESTN    : %CHECK          :                                           :
 :  TIME     : %DATE() %TIME() : aujourdhui = %date()                      :
 :  WHENxx   : WHEN            :                                           :
 :  XFOOT    : %xfoot          :                                           :
 :  XLATE    : %xlate          :                                           :
 :  Z-ADD    : eval            :                                           :
 :  Z-SUB    : eval -          :                                           :
 :...........:.................:.................:.............:...:...:...:
 


|    Changer de couleur
 V5R10 : nouvelle gestion des erreurs (format fixe ET format libre)
 
  MONITOR / ENDMON 
 
 il s'agit de définir un groupe d'instructions devant être monitorées
 
  si une erreur survient , le contrôle est transmis au premier ON-ERROR
 
  si tout se passe normalement, on saute à l'instruction qui suit le ENDMON.
 
 
  ON-ERROR n° | ou n°1 : n°2 : n°3 | ou *FILE, *PROGRAM , *ALL
 
  gère une erreur spécifique ou une série d'erreurs dans un bloque MONITOR.
 
  les erreurs sont gérées dans l'ordre d'écriture, vous devez donc écrire
   du plus spécifique (une seule erreur) au plus large (*ALL), comme
   les MONMSG du CL.
 
  si une erreur survient pendant le traitement du code associé à un ordre
    on-error, l'erreur elle même n'est pas gérée, sauf à imbriquer MONITOR.
 


|    Changer de couleur
 /free
  MONITOR ;
   chain nocli clientf1 ;
   if %found ;
      chaine = %subst( tbl(x) : %scan('*':tbl(x)) + 1)
   endif;
 
  On-error 1211        ;    // fichier non ouvert
     ...
  On-error *FILE       ;    // autres erreurs fichier
     ...
  On error 00100:00121 ;    // erreur de chaîne ou d'indice
     ....
  On-error *ALL        ;    // autres erreurs (MONMSG CPF0000)
     MONITOR;
       ....
       ....
     ON-ERROR *ALL;
     ...                    // prb pendant le traitement de l'erreur !!
     ENDMON;
  ENDMON;
 /end-free


|    Changer de couleur
  CALLP est apparu en V3R60 et permet un appel en format libre
 
     il faut pour cela déclarer le programme et ses paramètres, avant,
      en spécif D, cela s'appelle un PROTOTYPE.
+-----------------------------------------------------------+
! DEXEC             PR                  EXTPGM('QCMDEXC')   !
! D                              250     const              !
! D                               15P 5  const              !
+-----------------------------------------------------------+
    PR indique qu'il s'agit d'un prototype (même positions que DS)
 
    EXTPGM le nom du pgm externe (peut être qualifié)
 
     CONST sur un paramètre indique que ce paramètre peut NE PAS etre une
           variable (constante, calcul, fonction intégrée, ...)
 
     VALUE passage de paramètre par valeur (pas de valeur retour)
 
     OPTIONS(*NOPASS) ce paramètre peut ne pas etre transmis
                       [tester le nombre de paramètres avec %parms() ]
     OPTIONS(*OMIT)   ce paramètre peut etre omis
                       [tester le paramètre avec %addr(param) <> *NULL]


|    Changer de couleur
 
  en free-form
        dcl-PR exec EXTPGM('QCMDEXC')
          *N char(250) const;
          *N packed(15 5) const;
        end-pr;
 
 tout cela permettant 
 
     C                   callp     exec(commande : %size(commande))
 ou
             exec('WRKSPLF': 7) ;
        //ou
             cmd = 'wrkactjob output(*print)';
             exec(cmd : %len(%trimr(cmd)) );
 
    la réception des paramètres peut elle même être réalisée
 
      a/ soit, comme avant (*ENTRY PLIST)
 
      b/ ou en spécif D, avec protoype ET une interface de procédure ( PI )
          (en version 7, L'interface de procédure seule suffit.)


|    Changer de couleur
 
   En version 5 et 6
   -----------------
 
       DProgrammeB       PR                   EXTPGM('PGMB')
       D                                6  0
 
       DProgrammeB       PI
       D nocli                          6  0
 
   En version 7
   ------------
 
       DProgrammeB       PI                   EXTPGM('PGMB')
       D nocli                          6  0
 
   En version 7.2
   --------------
 
         dcl-pi ProgrammeB EXTPGM('PGMB');
            nocli packed(6 0);
         end-pi;


|    Changer de couleur
 
 les prototypes ammènent aussi la possibilité de créer des procédures :
 
  c'est comme un sous programme, encadré par une spécif P ou DCL-PROC, avec
    variables locales, passage de paramètres et se terminant par RETURN
 
 
 Pmaprocedure           B  
 D                      PI
 D param1                         6  0
 D param2                        10
 
 D mavariable           S         5I 0
 
  /free
             ...
            return
  /end-free
 Pmaprocedure           E 
 
 vous devez aussi la déclarer en début de programme par un prototype (PR)
 


|    Changer de couleur
 
 les prototypes ammènent aussi la possibilité de créer des procédures :
 
  c'est comme un sous programme, encadré par une nouvelle spécif P ou DCL-PR
    avec variables locales, passage de paramètres et se terminant par RETURN
 
 
   dcl-proc maprocedure;
      dcl-pi *n;
         param1  packed(6 0);
         param2  char(10);
      end-pi;
 
      dcl-s mavariable int(5);
 
             ...
            return
 
   end-proc maprocedure;
 
 vous devez aussi la déclarer en début de programme par un prototype (PR)
 


|    Changer de couleur
Exemple complet :
---------------
 Dmaprocedure           PR
 D                                6  0
 D                               10
  /free
    // programme principal
    maprocedure (p1 : p2);
    *inlr = *on
  /end-free
 Pmaprocedure           B
 D                      PI
 D param1                         6  0
 D param2                        10
 
 D mavariable           S         5I 0
 
  /free
         ...
        return
  /end-free
 Pmaprocedure           E


|    Changer de couleur
 
 la procedure peut retourner une valeur, on parle alors de fonction 
 
  vous devez préciser sur les lignes PR et PI,type et LG de la val. retour
 
   Dmafonction            PR        1 
   D                                6  0
   D                               10
 
    (ici, 1 ALPHA)
 
  le code opération RETURN doit posséder un argument : la valeur retournée
 
  la fonction se manipule alors comme une variable
 
     x = f(y) ou bien  if f(y) = 0  ou encore   A = B + f(y) 
 
 
  si vous souhaitez externaliser la fonction, il faudra impérativement
   utiliser ILE et la placer dans un objet *SRVPGM (programme de service),
   une sorte de DLL pour I5/OS.
 


|    Changer de couleur
Exemple complet :
---------------
 Dmafonction            PR        1
 D                                6  0
 D                               10
  /free
    // programme principal
    retour = mafonction (p1 : p2);
    *inlr = *on
  /end-free
 Pmafonction            B
 D                      PI        1
 D param1                         6  0
 D param2                        10
 
 D mareponse            S         1
 
  /free
         ...
        return mareponse;
  /end-free
 Pmafonction            E


|    Changer de couleur
 
 Exemple d'une fonction en free_from: 
 
    dcl-PR Findemois DATE; // cette fonction retourne une date;
      *N DATE(*ISO);
    end-pr ;
 
    dcl-proc Findemois;
     // Définition de l'Interface de procédure  (DCL-PI)
     // doit être conforme avec le prototype (vérifié à la compilation)
     dcl-PI *N DATE;
        dateIN DATE(*ISO);
     end-pi ;
     // variables locales;
      dcl-s Wdate  DATE;
 
       //exemple : 15 avril + 1 mois => 15 Mai / -15 jours => 30 Avril
        wdate = DATEIN + %MONTHS(1);
        wdate = wdate - %days(%SUBDT(wdate:*D));
        return wdate;
    end-proc ;




©AF400