/*************************************************************************************************************************************/ /* */ /* G E N E R A T I O N D ' U N E S E Q U E N C E D E N O M B R E S D E C I M A U X */ /* C O R R E S P O N D A N T A U X N U M E R O S D ' I M A G E S D ' U N E S E Q U E N C E : */ /* */ /* */ /* Definition : */ /* */ /* Cette commande genere une sequence */ /* de nombres decimaux correspondant */ /* aux numeros des images d'une sequence. */ /* */ /* */ /* Author of '$xci/nombres$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1989??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R F A C E ' listG ' : */ /* */ /* */ /* :Debut_listG: */ /* :Fin_listG: */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */ /* */ /*************************************************************************************************************************************/ @define PRAGMA_CL_____PAS_DE_LIBRAIRIES_DYNAMIQUES /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F I C H I E R S D ' I N C L U D E S : */ /* */ /*************************************************************************************************************************************/ #include INCLUDES_MINI /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #define NOM_DE_LA_SEQUENCE \ C_VIDE \ /* Nom de la sequence d'image... */ #define SEPARATEUR_DES_ELEMENTS_DE_LA_LISTE \ C_BLANC \ /* Separateur a utiliser entre chaque valeur editee... */ #include xci/sequence.01.I" #define INCREMENT_DU_NUMERO_D_IMAGE \ ZERO \ /* Increment du numero d'images (introduit le 20020819162810). */ #define NOMBRE_DE_CHIFFRES_A_EDITER \ NOMBRE_DE_CHIFFRES \ /* Nombre de chiffres a editer pour les numeros. */ #define METTRE_UN_NUMERO_PAR_LIGNE \ FAUX \ /* Faut-il mettre un numero par ligne ('VRAI') ou bien tous les mettre les uns a la */ \ /* suite des autres ('FAUX'). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* G E N E R A T I O N D ' U N E S E Q U E N C E D E N O M B R E S D E C I M A U X */ /* C O R R E S P O N D A N T A U X N U M E R O S D ' I M A G E S D ' U N E S E Q U E N C E : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_DE_LA_SEQUENCE)); /* Nom de la sequence a generer. */ DEFV(CHAR,INIC(POINTERc(nom_postfixe),NOM_UNDEF_VIDE)); /* Nom d'un eventuel postfixe a placer derriere <nom_imageA><numero> (par exemple '$ROUGE'). */ DEFV(CHAR,INIT(POINTERc(nom_image),NOM_UNDEF)); /* Nom courant des images. */ DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE)); /* Numero de la premiere image, */ DEFV(Int,INIT(derniere_image,DERNIERE_IMAGE)); /* Numero de la derniere image. */ DEFV(Int,INIT(numero_d_image,UNDEF)); /* Numero de l'image courante. */ DEFV(Int,INIT(increment_du_numero_d_image,INCREMENT_DU_NUMERO_D_IMAGE)); /* Increment du numero d'images (introduit le 20020819162810). */ DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES)); /* Pas de passage d'un numero d'image a une autre. */ DEFV(CHAR,INIC(POINTERc(separateur_des_elements_de_la_liste),SEPARATEUR_DES_ELEMENTS_DE_LA_LISTE)); /* Separateur a utiliser entre chaque valeur editee... */ DEFV(Int,INIT(nombre_de_chiffres_a_editer,NOMBRE_DE_CHIFFRES_A_EDITER)); /* Nombre de chiffres a editer pour les numeros. ATTENTION, le 20001123171725, */ /* la variable 'nombre_de_chiffres_a_editer' est passee de 'Positive' a 'Int' afin de */ /* se retrouver avec des nombres enormes comme cela s'est vu sur '$LACT14' lors d'un */ /* 'listN' portant sur un texte inexistant ('v $Falias_listG Liste=..xci.nombres.X') */ /* avec une commande du type : */ /* */ /* listN XXXX YYYY */ /* */ /* ou 'XXXX' et 'YYYY' n'existent pas dans le '$Fnota' courant... */ DEFV(Logical,INIT(mettre_un_numero_par_ligne,METTRE_UN_NUMERO_PAR_LIGNE)); /* Faut-il mettre un numero par ligne ('VRAI') ou bien tous les mettre les uns a la */ /* suite des autres ('FAUX'). */ /*..............................................................................................................................*/ GET_ARGUMENTS_(nombre_d_arguments ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA); GET_ARGUMENT_C("postfixe=",nom_postfixe); GET_ARGUMENT_I("premiere=""p=",premiere_image); GET_ARGUMENT_I("derniere=""d=",derniere_image); GET_ARGUMENT_I("increment=""i=",increment_du_numero_d_image); GET_ARGUMENT_I("pas=",pas_des_images); GET_ARGUMENT_C("separateur=""s=",separateur_des_elements_de_la_liste); GET_ARGUMENT_I("nombre=""n=""chiffres=",nombre_de_chiffres_a_editer); GET_ARGUMENT_K("zero=",PREMIER_CARACTERE_ITb0(_chain_numero_____caractere_zero_devant_un_numero)); GET_ARGUMENT_L("lignes=""ligne=",mettre_un_numero_par_ligne); GET_ARGUMENT_I("base_numeration=""base=",_chain_numero_____base_de_numeration); /* Argument introduit le 20091212213350... */ ) ); /* ATTENTION, l'option "chiffres=" contient deux lettres doublees ("ff") ce que la fonction */ /* 'sscanf(...)' de 'SYSTEME_ES9000_AIX_CC' n'accepte pas. En consequence de quoi, sur ce */ /* SYSTEME, on ne l'utilisera pas, mais plutot "nombre=" ou "n=" (voir a titre d'exemple le */ /* fichier '$Fdirectories'). */ /* */ /* Le 20070223101714, j'ai remis "chiffres=" pour des raisons d'homogeneite avec tous */ /* les programmes qui utilisent "chiffres=" (par exemple 'v $xrc/mandel.01$K chiffres='). */ Test(IZLT(nombre_de_chiffres_a_editer)) Bblock EGAL(nombre_de_chiffres_a_editer,NOMBRE_DE_CHIFFRES_A_EDITER); /* Nombre de chiffres par defaut... */ PRINT_ERREUR("le nombre de chiffres demande est negatif, la valeur par defaut est donc forcee"); CAL1(Prer1("elle vaut %d\n",nombre_de_chiffres_a_editer)); Eblock ATes Bblock Eblock ETes DoQu(numero_d_image,premiere_image,derniere_image,pas_des_images) Bblock DEFV(Int,INIT(numero_effectif_d_image,ADD2(numero_d_image,increment_du_numero_d_image))); /* Introduit le 20030619094650 pour la validation du signe... */ Test(IZLT(numero_effectif_d_image)) /* Test introduit le 20030619094650... */ Bblock PRINT_ATTENTION("un numero effectif d'image est negatif"); CAL1(Prer2("il vaut %d et va devenir %u\n",numero_effectif_d_image,POSI(numero_effectif_d_image))); Eblock ATes Bblock Eblock ETes EGAL(nom_image ,COND(IFEQ_chaine(nom_postfixe,NOM_UNDEF_VIDE) ,chain_Aconcaten2_sauf_nom_pipe(nom_imageA ,chain_numero(POSI(numero_effectif_d_image) ,nombre_de_chiffres_a_editer ) ) ,chain_Aconcaten3_sauf_nom_pipe(nom_imageA ,chain_numero(POSI(numero_effectif_d_image) ,nombre_de_chiffres_a_editer ) ,nom_postfixe ) ) ); /* Generation du nom courant, */ Test(IL_FAUT(mettre_un_numero_par_ligne)) Bblock CAL2(Prin1("%s\n" ,nom_image ) ); /* Edition du nom suivi d'un changement de ligne systematique... */ Eblock ATes Bblock CAL2(Prin1(Cara(chain_Aconcaten2("%s" ,COND(COND(IFLE(premiere_image,derniere_image) ,IFLT(numero_d_image,derniere_image) ,IFGT(numero_d_image,derniere_image) ) ,separateur_des_elements_de_la_liste ,ptCARA(C_VIDE) ) ) ) ,nom_image ) ); /* Edition du nom suivi d'un 'BLANC' sauf pour le dernier nom... */ Eblock ETes CALZ_FreCC(nom_image); /* Et enfin, liberation... */ Eblock EDoQ RETU_Commande; Eblock ECommande