/*************************************************************************************************************************************/ /* */ /* 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... */