Utilitaires fortran =================== .. csv-table:: "**Nom**", "**Fonction**" "U2MESS", "Imprime un message simple" "U2MESK", "Imprime à la fois un message et des valeurs de type caractère" "U2MESI", "Imprime à la fois un message et des valeurs de type entière" "U2MESR", "Imprime à la fois un message et des valeurs de type réelle" "U2MESG", "Imprime à la fois un message, des valeurs de type caractère, entière et réel" Impression de messages simples ------------------------------ **SUBROUTINE U2MESS( TYPE , IDMESS)** .. csv-table:: "TYPE", "IN", "Type de message (E,F,A,I)" "IDMESS", "IN", "identificateur du message" Exemple: .. code-block:: text CALL U2MESS('A','CHATON_1') Imprime le message suivant : .. code-block:: text Le petit chat est de couleur verte Ouf ! Impression de messages et des valeurs de type caractère ------------------------------------------------------- **SUBROUTINE U2MESK( TYPE , IDMESS , NK , VALK )** .. csv-table:: "TYPE", "IN", "Type de message (E,F,A,I)" "IDMESS", "IN", "Identificateur du message" "NK", "IN", "Nombre paramètres de type caractère" "VALK", "IN", "Valeurs des paramètres de type caractères" Exemple : .. code-block:: text VALK = 'ROSE' CALL U2MESK('A',CHATON_2', 1, VALK)'' Imprime le message suivant : .. code-block:: text Le petit chat est de couleur rose. Impression de messages et des valeurs de type entière ----------------------------------------------------- **SUBROUTINE U2MESI( TYPE , IDMESS , NI , VALI)** .. csv-table:: "TYPE", "IN", "Type de message (E,F,A,I)" "IDMESS", "IN", "Identificateur du message" "NI", "IN", "Nombre de paramètres de type entier" "VALI", "IN", "Valeurs des paramètres de type entier" Exemple : .. code-block:: text VALI (1) = 4 VALI (2) = 2 CALL U2MESI('A','CHATON_3', 2, VALI)'' Imprime le message suivant : .. code-block:: text Le petit chat a 4 pattes et 2 yeux. Impression de messages et des valeurs de type réel -------------------------------------------------- **SUBROUTINE U2MESR( TYPE , IDMESS , NR , VALR)** .. csv-table:: "TYPE", "IN", "Type de message (E,F,A,I)" "IDMES", "IN", "Identificateur du message" "NR", "IN", "Nombre paramètres de type réel" "VALR", "IN", "Valeurs des paramètres de type réel" Exemple : .. code-block:: text VALR (1) = 130. CALL U2MESR('A','CHATON_4', 1, VALR)'' Imprime le message suivant : .. code-block:: text Le petit chat pèse 130.0 kilogrammes. Impression de messages des valeurs de type caractères, entières et réelles -------------------------------------------------------------------------- **SUBROUTINE U2MESG( TYPE , IDMESS , NK , VALK , NI , VALI , NR , VALR )** .. csv-table:: "TYPE", "IN", "Type de message (E,F,A,I)" "IDMESS", "IN", "Identificateur du message" "NK", "IN", "Nombre de paramètres de type caractère" "VALK", "IN", "Valeurs des paramètres de type caractère" "NI", "IN", "Nombre de paramètres de type entier" "VALI", "IN", "Valeurs des paramètres de type entier" "NR", "IN", "Nombre de paramètres de type réel" "VALR", "IN", "Valeurs des paramètres de type réel" Exemple : .. code-block:: text VALK (1) = 'bleue' VALK (2) = 'rose' VALI = 5 VALR = 130. U2MESG('A','CHATON_5', 2, VALK, 1 , VALI, 1,VALR)'' Imprime le message suivant : .. code-block:: text ATTENTION: Votre chat est bizarre, il : - a plus de 4 pattes, il en a 5 , - est de couleur bleue et rose, - est trop gros, il pèse 130.0 kilogrammes. On arrête les frais, ce n'est pas un chat !! Impression d'un message en plusieurs « morceaux » ------------------------------------------------- Il est parfois pratique d'émettre un message «par morceaux» c'est à dire d'appeler plusieurs fois la routine U2MESG. Ceci est en pricipe impossible pour les messages d'erreur fatale (F/E) car le code s'arrête dès le premier message ! Par ailleurs, on souhaite que le message complet apparaisse à l'utilisateur comme un message unique. En particulier on veut qu'il apparaisse dans un même cadre. Pour cela, on dispose du mécanisme 'A+', 'F+', … Le principe est d'ajouter un '+' au type du message tant que le message n'est pas terminé. Le dernier message du groupe (sans le '+') termine le message. On pourra par exemple écrire un message en 2 morceaux en écrivant : CALL U2MESK('F+', 'FONCT0_11',1,NOMF) CALL U2MESR('F', 'FONCT0_26',3,VALR) Ce qui, associé au catalogue suivant : 11 : _(u""" L'interpolation de la fonction '%(k1)s' n'est pas autorisée. Le type d'interpolation de la fonction vaut 'NON' -> Risque & Conseil : Voir le mot-clé INTERPOL des commandes qui créent des fonctions. """), 26 : _(u""" abscisse demandée : %(r1)f intervalle trouvé : [:ref:`%(r2)f, %(r3)f <%(r2)f, %(r3)f>`] """), conduira à un message ressemblant à : .. code-block:: text !----------------------------------------------------------------------! .. code-block:: text ! ! ! ! ! L'interpolation de la fonction fonc3 n'est pas autorisée. ! ! Le type d'interpolation de la fonction vaut 'NON' ! ! ! ! -> Risque & Conseil : ! ! Voir le mot-clé INTERPOL des commandes qui créent des fonctions. ! ! ! ! abscisse demandée : 105. ! ! intervalle trouvé : [:ref:`0., 100. <0., 100.>`] ! !----------------------------------------------------------------------! *Remarques:* * Dans un groupe de messages produisant un message «par morceaux», le type des différents messages dot être le même (F/A/I). * L'identifiant du message imprimé est celui du premier message du groupe.