ATTENTION l'ORDRE LIBERER_PGM N'EST PLUS DISPONIBLE EN V8.1 D'ADELIA/400 et V8.2 D'ADELIA/IWS
Depuis la version 8.1 d'Adélia/400 ou la version 8.2 d'Adélia/IWS, les programmes Adélia sont générés en RPG 4 ILE. Le RPG 4 ILE ne permet plus d'exécuter l'instruction RPG 3 "FREE" qui correspondait au LIBERER_PGM d'Adélia. De même les programmes générés en RPG 4 ILE ne peuvent plus être libérés de la mémoire via une instruction FREE du RPG 3 (ou son équivalent suivant les langages de programmation).
Comment désormais effectuer cette libération ?
Tout d'abord, assurez-vous que l'utilisation de l'instruction LIBERER_PGM (où son équivalent) était bien justifiée :
Elle n'avait à être utilisée que pour des programmes se terminant par l'instruction RETOURNER, ou pour des programmes ayant comme option de fin "RT" (cf caractéristiques de génération d'un programme).
Sachant que l'option de fin par défaut est "LR", un programme se terminant par TERMINER se décharge naturellement de la mémoire : le LIBERER_PGM est donc inutile dans ce cas.
1/ Votre programme se termine par un RETOURNER.
Dans ce cas, prévoyez un paramètre d'entrée supplémentaire, que le programme appelant chargera avec 2 valeurs possibles : une valeur pour une éxecution 'normale' et une autre valeur pour la libération du programme
Exemple :
Pgm appelé ancienne version :
RECEVOIR P1 P2
....
RETOURNER
Pgm appelé nouvelle version :
RECEVOIR P1 P2 P_APPEL
SI P_APPEL = 'FIN'
TERMINER
FIN
...
RETOURNER
Pgm appelant ancienne version
.....
APPELER PGM P1 P2
....
LIBERER_PGM PGM
Pgm appelant nouvelle version
....
P_APPEL = *BLANK
APPELER PGM P1 P2 P_APPEL
....
P_APPEL = 'FIN'
APPELER PGM P1 P2 P_APPEL
2/ votre programme a été généré avec l'option de fin à RT :
- mettez "LR" comme option de fin et transformez vos TERMINER en RETOURNER (et mettez toujours un RETOURNER comme dernière instruction executable de votre programme).
- appliquez ensuite les transformations décrites dans le point précédent