/*************************************************************************************************************************************/
/* */
/* S E C O N D E P A R T I E D E S D E F I N I T I O N S D U L A N G A G E ' K ' */
/* D E P E N D A N T E S D U L A N G A G E S O U R C E ( ' C ' ) : */
/* */
/* */
/* Definition : */
/* */
/* Dans ce fichier, se trouvent toutes les */
/* constantes, les definitions et les macros */
/* utiles a la definition du langage 'K' et */
/* qui dependent du langage source (le 'C'). */
/* */
/* */
/* Author of '$xil/defi_c2$vv$DEF' : */
/* */
/* Jean-Francois Colonna (LACTAMME, 19870000000000). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F O N C T I O N S D ' A C C E S A L ' E N V I R O N N E M E N T : */
/* */
/*************************************************************************************************************************************/
#define POINTEUR_D_UNE_VARIABLE_UNDEF \
ZERO \
/* Valeur du pointeur renvoye par 'getenv()' pour une variable inexistante... */
#define VALEUR_D_UNE_VARIABLE_UNDEF \
CHAINE_UNDEF \
/* Valeur d'une variable inexistante apres un 'Gvar()'... */
DEFV(Extern,DEFV(CHAR,POINTERc(getenv())));
/* Le 20040603105032, la definition de 'getenv(...)' est passee de 'FonctionC' a 'CHAR' */
/* a cause de 'v $xil/defi_K2$vv$DEF DebutDeDefinitionDeFonction' et ce afin donc que ce */
/* marqueur n'apparaisse pas dans un 'Extern'... */
#if ( (defined(SYSTEME_APC_LinuxRedHat_GCC)) \
|| (defined(SYSTEME_APC_LinuxUbuntu_GCC)) \
|| (defined(SYSTEME_APC_LinuxUbuntu_ICC)) \
|| (defined(SYSTEME_APC_LinuxUlmint_GCC)) \
|| (defined(SYSTEME_APC_LinuxUlmint_ICC)) \
)
/* Test introduit le 20071121111207 a cause de '$LACT18'... */
/* */
/* Le SYSTEME 'SYSTEME_APC_LinuxRedHat_GCC' a ete introduit le 20090318090854 suite au */
/* remplacement de "trinite.polytechnique.fr" par "europe.polytechnique.fr" (='$CMAP28', */
/* 'v $Fmachines 20090316110150'). */
# define GvarDefaut(variable,valeur_par_defaut) \
COND(IFNE(Cara(getenv(variable)),Cara(POINTEUR_D_UNE_VARIABLE_UNDEF)) \
,Cara(getenv(variable)) \
,Cara(valeur_par_defaut) \
) \
/* Recuperation d'une variable definie par 'setenv' avec valeur par defaut. */
#Aif ( (defined(SYSTEME_APC_LinuxRedHat_GCC)) \
|| (defined(SYSTEME_APC_LinuxUbuntu_GCC)) \
|| (defined(SYSTEME_APC_LinuxUbuntu_ICC)) \
|| (defined(SYSTEME_APC_LinuxUlmint_GCC)) \
|| (defined(SYSTEME_APC_LinuxUlmint_ICC)) \
)
# define GvarDefaut(variable,valeur_par_defaut) \
COND(IFNE(getenv(variable),POINTEUR_D_UNE_VARIABLE_UNDEF) \
,getenv(variable) \
,ptCARA(valeur_par_defaut) \
) \
/* Recuperation d'une variable definie par 'setenv' avec valeur par defaut. */
#Eif ( (defined(SYSTEME_APC_LinuxRedHat_GCC)) \
|| (defined(SYSTEME_APC_LinuxUbuntu_GCC)) \
|| (defined(SYSTEME_APC_LinuxUbuntu_ICC)) \
|| (defined(SYSTEME_APC_LinuxUlmint_GCC)) \
|| (defined(SYSTEME_APC_LinuxUlmint_ICC)) \
)
DEFV(Extern,DEFV(vrai_Int_de_base,putenv()));
/* On notera le 20110226101007 qu'il serait peu utile de definir de plus : */
/* */
/* DEFV(Extern,DEFV(vrai_Int_de_base,putenv())); */
/* */
/* car, en effet, cela ne permet de modifier une variable que dans l'environnement du */
/* process '$X' courant et non pas (malheureusement...) dans le '$CSH' qui a lance */
/* l'execution de ce '$X'. J'ai note cela alors que je faisais des tests en vue de */
/* renvoyer 'v $xig/common$STR liste_des_CODE_ERREUR_rencontres' au '$CSH' a la sortie */
/* de chaque '$X' afin de pouvoir tester, si besoin etait, l'ensemble des codes d'erreur */
/* rencontres... */
/* */
/* Finalement, je l'introduit le 20120214082654 car, en effet, cela va etre utile pour */
/* les '$x' qui creent des process "fils", par exemple dans des activites paralleles... */
#define PvarDefaut(variable,valeur) \
putenv(EGAs(chain_Aconcaten3(variable,"=",valeur))) \
/* Mise d'une variable dans l'environnement (introduit le 20120214091448)... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F O N C T I O N S D E C O N V E R S I O N S N U M E R I Q U E S : */
/* */
/*************************************************************************************************************************************/
DEFV(Extern,DEFV(vrai_Int_de_base,atoi()));
#define Conversion_Int(chaine_numerique) \
INTE(atoi(chaine_numerique)) \
/* Acces a la fonction de conversion alpha-NUMERIQUE --> valeur entiere, sans test de ce */ \
/* qui pourrait trainer derriere... */ \
/* On notera la fonction 'INTE(...)' mise en place le 1995072400 afin d'eviter des */ \
/* problemes du type : */ \
/* */ \
/* ...: warning(1177): argument is incompatible with formal */ \
/* */ \
/* sur 'SYSTEME_SGPCM801_IRIX_CC'... */
#define Conversion_Logical(chaine_numerique) \
LOGI(atoi(chaine_numerique)) \
/* Acces a la fonction de conversion alpha-NUMERIQUE --> valeur logique (introduite le */ \
/* 20180218111641...). */
DEFV(Extern,DEFV(vrai_Long_Int_de_base,strtol()));
%define Conversion_generale_int(chaine_numerique,chaine_residuelle) \
strtol(chaine_numerique,ADRESSE(chaine_residuelle),BASE10)
/* Acces a la fonction de conversion alpha-NUMERIQUE --> valeur entiere, avec test de ce */
/* qui pourrait trainer derriere... On notera l'utilisation de '$PASSE_3' ("%") car, en */
/* effet, 'Conversion_generale_Int' est utilisee dans '$xig/fonct$vv$FON' en conjonction */
/* avec l'operateur de concatenation ("`") de '$xcc/cpp$Z'. ATTENTION, on ne peut ecrire : */
/* */
/* %define Conversion_generale_Int(...) \ */
/* */
/* \_/ */
/* */
/* a cause de l'usage : */
/* */
/* Conversion_generale`fonction_de_conversion(...) */
/* */
/* qui en est fait dans '$xig/fonct$vv$FON' ; en effet, cela impliquerait l'utilisation de */
/* 'Int' en tant qu'argument de 'GENERE__FonctionI_Fload(...)' ; or, 'Int' est lui-meme */
/* une procedure ; il y aurait donc un conflit d'usage... */
/* ATTENTION, etant donne que 'Conversion_generale_genp(...)' et 'GENP(...)' n'appartiennent */
/* pas a la meme '$PASSE_?', la definition de 'Conversion_generale_genp(...)' ne peut avoir */
/* lieu qu'apres celle de 'GENP(...)' ('v $xiii/Images$DEF Conversion_generale_genp'). */
DEFV(Extern,DEFV(vrai_double_de_base,atof()));
#define Conversion_Float(chaine_numerique) \
atof(chaine_numerique) \
/* Acces a la fonction de conversion alpha-NUMERIQUE --> valeur flottante, sans test de ce */ \
/* qui pourrait trainer derriere... */
DEFV(Extern,DEFV(vrai_double_de_base,strtod()));
%define Conversion_generale_flot(chaine_numerique,chaine_residuelle) \
strtod(chaine_numerique,ADRESSE(chaine_residuelle))
/* Acces a la fonction de conversion alpha-NUMERIQUE --> valeur flottante, avec test de ce */
/* qui pourrait trainer derriere... On notera l'utilisation de '$PASSE_3' ("%") car, en */
/* effet, 'Conversion_generale_Float' est utilisee dans '$xig/fonct$vv$FON' en conjonction */
/* avec l'operateur de concatenation ("`") de '$xcc/cpp$Z'. ATTENTION, on ne peut ecrire : */
/* */
/* %define Conversion_generale_Float(...) \ */
/* */
/* \___/ */
/* */
/* a cause de l'usage : */
/* */
/* Conversion_generale`fonction_de_conversion(...) */
/* */
/* qui en est fait dans '$xig/fonct$vv$FON' ; en effet, cela impliquerait l'utilisation de */
/* 'Float' en tant qu'argument de 'GENERE__FonctionI_Fload(...)' ; or, 'Float' est lui-meme */
/* une procedure ; il y aurait donc un conflit d'usage... */