/*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N S D E C O M P I L A T I O N : */ /* */ /* */ /* Author of '$xrq/particle.M1$I' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1994??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F I C H I E R S D ' I N C L U D E S G E N E R A U X : */ /* */ /*************************************************************************************************************************************/ /* Nota : les fichiers d'includes generaux : */ /* */ /* #include "DEFINITIONS.I" */ /* #include INCLUDES_BASE */ /* #include image_image_TRI_IMAGE_EXT */ /* #include image_image_VECTEURS_EXT */ /* */ /* ne peuvent etre references ici (malheureusement) a cause du fonctionnement de la */ /* commande '$xcc/cl$Z' qui n'explore pas recursivement les fichiers d'includes... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* O P T I M I S E U R D E C O M P I L A T I O N : */ /* */ /*************************************************************************************************************************************/ #define GENERE__Fonction__OPT(Fsequence,racine,sequence) \ /* Generation automatique d'une fonction et de sa sequence d'appel... */ \ /* */ \ /* ATTENTION : si la ligne d'appel de 'GENERE__Fonction__OPTIMISATION(...)' est trop */ \ /* longue, la seule solution sera de l'ecrire : */ \ /* */ \ /* GENERE__Fonction__OPTIMISATION */ \ /* (Fsequence,racine,sequence); */ \ /* */ \ /* car, en effet, l'ecrire : */ \ /* */ \ /* GENERE__Fonction__OPTIMISATION(Fsequence */ \ /* ,racine */ \ /* ,sequence */ \ /* ); */ \ /* */ \ /* introduit ensuite des espaces dans la concatenation 'f$racine$Fsequence' qui suit... */ \ /* Ceci a ete note le 20170117164626 lors de la mise au point de 'v $xi/DICO_Fonction$Z'... */ \ /* */ \ /* Le 20170124121519, pour ramener tout sur une meme ligne afin de ne pas avoir de */ \ /* problemes d'espaces "parasites" dans les arguments, il a fallu raccourcir le nom, d'ou */ \ /* le 'GENERE__Fonction__OPT(...)'. */ \ /* */ \ /* En fait, le probleme venait de 'v $xrq/particle.M1$I 20170124134356', donc le changement */ \ /* de 'GENERE__Fonction__OPTIMISATION(...)' en 'GENERE__Fonction__OPT(...)' n'etait pas */ \ /* utile... */ \ DEFV(Local,DEFV(FonctionI,f$racine$Fsequence())) \ /* Ce type de fonction est introduit dans l'espoir de reduire le temps de compilation. On */ \ /* notera que le nom genere est 'f_racine_Fsequence' a cause du fait que la longueur des */ \ /* noms autorisee par le pre-processeur est tres superieure a ce qu'autorisent la majorite */ \ /* des compilateurs ; la 'racine' est donc la pour lever certaines ambiguites qui pourraient */ \ /* apparaitre dans des noms possedant une longue racine commune... */ \ /*-----------------------------------------------------------------------------------------------------------------------------------*/ \ Bblock \ INIT_ERROR; \ /*..............................................................................................................................*/ \ BLOC(sequence); \ /* Implantation de la sequence de code argument dont le nom reel est '___sequence'. On */ \ /* notera que l'on ne peut pas simplifier ce processus de la facon suivante : */ \ /* */ \ /* #define GENERE__Fonction__OPT(sequence,racine) \ */ \ /* ... \ */ \ /* BLOC($$$sequence); \ */ \ /* ... \ */ \ /* */ \ /* car en effet, cela obligerait a declarer '___sequence' de la facon suivante : */ \ /* */ \ /* =define ___sequence */ \ /* ... */ \ /* */ \ /* ce qui impliquerait que presque toutes les procedures soient elles aussi declarees */ \ /* ainsi, ce que je n'ose pas tenter... */ \ RETU_ERROR; \ Eblock \ \ %define Fsequence \ \ Bblock \ \ CALS(f$racine$Fsequence()); \ \ Eblock \ /* Generation d'une sequence d'appel a la fonction 'f_racine_Fsequence()' generee ci-dessus. */ \ /* */ \ /* On notera que le 20170124134356 la definition de 'Fsequence' est passe de '$PASSE_2' a */ \ /* '$PASSE_3' car, en effet, depuis quelques jours, l'appel a 'GENERE__Fonction__OPT(...)' */ \ /* est fait a l'interieur de 'DEFV(LoF,...)', or 'LoF' ('v $xil/defi_K2$vv$DEF LoF') est */ \ /* lui-aussi defini en '$PASSE_2' ('v $xil/defi_c1$vv$DEF TypedefP'). D'ou la necessite de */ \ /* decaler la definition de 'Fsequence' a la passe suivante afin que le 'define' qui le */ \ /* realise soit bien pris en compte... */