> Tech > Un exemple de programme utilisant la fonction log C

Un exemple de programme utilisant la fonction log C

Tech - Par iTPro - Publié le 24 juin 2010
email

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



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 gratuitement cette ressource

TOP 5 Modernisation & Sécurité des Postes Clients

TOP 5 Modernisation & Sécurité des Postes Clients

Pour aider les entreprises à allier les restrictions liées à la crise et la nécessaire modernisation de leurs outils pour gagner en réactivité, souplesse et sécurité, DIB-France lance une nouvelle offre « Cloud-In-One » combinant simplement IaaS et DaaS dans le Cloud, de façon augmentée.

Tech - Par iTPro - Publié le 24 juin 2010