Utilisation de pointeurs pour transmettre des paramètres en RPG

Exemple, le plus simple possible, pour transmettre des paramètres en utilisant des pointeurs.

 La procédure principale transmet à  la procédure PtrPass un pointeur (pointant sur la chaine Str1)

 La procédure PtrPass modifie Str2 qui est « basée » sur le pointeur reçu en paramètre.

 Str1 & Str2 partage donc la même adresse toute les modification sur Str2, pourtant inconnu de la procédure principale, affecte Str1.

* Prototype                                                                     
D PtrPass         PR                                                         
D                                 *   value                                      
 * --------------------------   
 * Variable de travail                                                 
D Ptr_Str1        s               *   inz(%addr(Str1))             
D Str1            s          65535    varying                           
 * --------------------------   
 * Main                                                                           
C                   eval      Str1='Voici le texte non encadré
C*                  eval      Ptr_Str1 = %addr(Str1)        
C                   CallP     PtrPass(Ptr_Str1)                        
 * Str1 est maintenant modifié                                       
C                   Eval      *INLR = *ON                             
 * ---------------------------   
 * Procedure PtrPass            
P PtrPass         B                                                            
D                 PI                                                                
D Ptr_Ch                          *   value                                
 * ------------------------   
 * Variables de travail             
 * -------------------------   
D  Str2           s          65535    varying                           
D                                     based(Ptr_Ch)                        
 * -------------------------   
 * On encadre la chaine < ------  >                                 
C                   eval      Str2 = %TRIM('<'+ Str2 + '>')  
C                   return                                                        
P                 E                                                                 
 * -----------------------                      
Print Friendly, PDF & Email