La figure 6 présente le programme RPG ILE Log, qui utilise les fonctions C log.
Le programme admet un paramètre numérique unique, calcule le logarithme népérien
et affiche le résultat. On peut invoquer ce programme depuis la ligne de commande
AS/400 de la manière suivante :
Call Log 1.2345
Un exemple de programme utilisant la fonction log C
La figure 7 présente le résultat obtenu lorsqu’on appelle ce programme avec
le paramètre 1,2345. La valeur présentée (+2,513251122797143E +000) est un littéral
flottant RPG ILE. La valeur suivant la lettre E (+000) est l’exposant de 10
à multiplier par la valeur à sa gauche (+2,513251122797143). Ainsi, ce littéral
représente la valeur 2,513251122797143 x 100. Comme 100 = 1, la valeur affichée
en figure 7 est en réalité 2,513251122797143. C’est le logarithme népérien approximatif
de 1,2345. Il est approximatif (mais suffisamment proche pour la plupart des
applications) parce que la valeur réelle ne peut pas être exprimée par un ensemble
fini de chiffres décimaux.
Notons qu’en A, figure 6, j’ai indiqué le répertoire de liaison ‘QC2LE’ dans
la spécification de contrôle. Comme mentionné précédemment, il faut toujours
utiliser cette spécification de contrôle quand on veut accéder à une fonction
de bibliothèque C quelconque. Le prototype pour la fonction C log apparaît en
B.
En C, j’ai codé le prototype pour la fonction C errno. Le nom réel de la fonction
errno est __errno (deux caractères de soulignement précédant le nom errno).
Dans ce programme, je fais référence à cette fonction en tant que GetErr, comme
illustré dans l’instruction PR en C. Notons que cette fonction renvoie un pointeur.
J’ai également indiqué un paramètre fictif avec Options(*Omit). Cela permet
d’invoquer des procédures ne requérant aucun paramètre, afin qu’il soit clair
que le nom référencé est une procédure plutôt qu’un nom de donnée.
J’ai indiqué plus haut qu’errno donne accès à un type int C (un entier de type
RPG ILE avec 10 chiffres et 0 décimale). En réalité, errno renvoie un pointeur
vers un objet int C. En D, j’ai défini l’entier basé (ErrNo) qui sera utilisé
à cet effet. En H, j’invoque la fonction errno en indiquant GetErr(*Omit) et
en plaçant sa valeur de renvoi dans le champ ErrNoPtr. Notons qu’en D, ErrNoPtr
est le pointeur de base pour le champ ErrNo. Par conséquent, l’instruction Eval
en H donne au programme RPG ILE l’accès à la valeur errno C. Une fois cette
instruction Eval exécutée, le programme peut faire référence à cette valeur
en référençant le champ basé ErrNo.
*Entry Plist en F indique que ce programme admet une zone packée de 15,5 comme
seul paramètre. J’ai défini ceci comme un champ 15,5 packé pour qu’on puisse
le transmettre plus facilement depuis la ligne de commande. Mais il faut le
convertir en champ en virgule flottante double précision destiné à être transmis
à la fonction C log. La première instruction Eval, en G, permet d’accomplir
cela. L’instruction Eval suivante en G invoque la fonction C log. En réalité,
j’aurais pu transmettre PrmNum comme paramètre vers la fonction log bien que
ce ne soit pas un nombre en virgule flottante double précision. Comme le paramètre
est transmis par valeur, le système le convertira au format approprié. J’ai
néanmoins jugé que le code serait plus clair si j’effectuais la conversion explicitement
comme illustré.
Après avoir invoqué la fonction log, l’instruction Eval en H donne au programme
accès à la valeur errno C. L’instruction If suivant cette instruction Eval teste
les éventuelles conditions d’erreur possibles décrites en D, figure 1. Si le
programme détecte une erreur, il affiche le message » log failed « . Sinon, il
affiche la valeur (LogVal) renvoyée par la fonction log.
Voyons à présent une fonction de bibliothèque C plus complexe.
Téléchargez cette ressource

État des lieux de la réponse à incident de cybersécurité
Les experts de Palo Alto Networks, Unit 42 et Forrester Research livrent dans ce webinaire exclusif leurs éclairages et stratégies en matière de réponses aux incidents. Bénéficiez d'un panorama complet du paysage actuel de la réponse aux incidents et de sa relation avec la continuité de l'activité, des défis auxquels font face les entreprises et des tendances majeures qui modèlent ce domaine. Un état des lieux précieux pour les décideurs et professionnels IT.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Les risques liés à l’essor fulgurant de l’IA générative
- Pourquoi est-il temps de repenser la gestion des vulnérabilités ?
- Reporting RSE : un levier d’innovation !
- De la 5G à la 6G : la France se positionne pour dominer les réseaux du futur
- Datanexions, acteur clé de la transformation numérique data-centric
