/*************************************************************************************************************************************/ /* */ /* M I S E S U R U N E S E U L E L I G N E D E S C H A I N E S D E C A R A C T E R E S */ /* E N T R E L E S A P O S T R O P H E S E T L E S Q U O T E S */ /* A I N S I Q U E L E S A N T I - Q U O T E S : */ /* */ /* */ /* Author of '$xcg/recolle.01$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1994??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 /* Ceci a ete introduit le 20030208114756 a cause de 'v $xcc/cpp$Z 20021212145057'. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 LONGUEUR_D_AVERTISSEMENT \ GRO4(LONGUEUR_D_UNE_LIGNE_SOURCE) \ /* Longueur arbitraire d'avertissement... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M I S E S U R U N E S E U L E L I G N E D E S C H A I N E S D E C A R A C T E R E S */ /* E N T R E L E S A P O S T R O P H E S E T L E S Q U O T E S */ /* A I N S I Q U E L E S A N T I - Q U O T E S : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Int,INIT(longueur_d_avertissement,LONGUEUR_D_AVERTISSEMENT)); /* Longueur arbitraire d'avertissement... */ DEFV(Int,INIT(nombre_de_caracteres_de_la_ligne_courante,ZERO)); /* Nombre de caracteres sur la ligne courante... */ DEFV(Char,INIT(caractere_courant,K_UNDEF)); /* Caractere courant. */ DEFV(Logical,INIT(on_vient_de_rencontrer_une_apostrophe,FAUX)); /* Cet indicateur indique en permanence si l'on vient de rencontrer */ /* immediatement une apostrophe (') : */ /* */ /* VRAI : apres la premiere rencontree, */ /* FAUX : apres la seconde, */ /* */ /* cet indicateur fonctionnant en bascule, puisque les apostrophes forment */ /* des couples de parentheses... */ DEFV(Logical,INIT(on_vient_de_rencontrer_une_quote,FAUX)); /* Cet indicateur indique en permanence si l'on vient de rencontrer */ /* immediatement une quote (") : */ /* */ /* VRAI : apres la premiere rencontree, */ /* FAUX : apres la seconde, */ /* */ /* cet indicateur fonctionnant en bascule, puisque les quotes forment */ /* des couples de parentheses... */ DEFV(Logical,INIT(on_vient_de_rencontrer_une_anti_quote,FAUX)); /* Cet indicateur indique en permanence si l'on vient de rencontrer */ /* immediatement une anti-quote (`) : */ /* */ /* VRAI : apres la premiere rencontree, */ /* FAUX : apres la seconde, */ /* */ /* cet indicateur fonctionnant en bascule, puisque les anti-quotes forment */ /* des couples de parentheses... */ /*..............................................................................................................................*/ GET_ARGUMENTS_(nombre_d_arguments ,BLOC(GET_ARGUMENT_I("longueur=""l=""L=",longueur_d_avertissement); ) ); Tant(GetcharT(caractere_courant)) Bblock /* Le caractere courant de l'entree courante est recupere ; et on boucle */ /* sur cette recuperation tant que l'on n'est pas au bout du fichier. */ Test(I3ET(IFEQ(caractere_courant,K_QUOTE) ,EST_FAUX(on_vient_de_rencontrer_une_anti_quote) ,EST_FAUX(on_vient_de_rencontrer_une_apostrophe) ) ) Bblock EGAL(on_vient_de_rencontrer_une_quote,NOTL(on_vient_de_rencontrer_une_quote)); /* On gere les quotes comme des parentheses... */ Eblock ATes Bblock Eblock ETes Test(I3ET(IFEQ(caractere_courant,K_APOSTROPHE) ,EST_FAUX(on_vient_de_rencontrer_une_quote) ,EST_FAUX(on_vient_de_rencontrer_une_anti_quote) ) ) Bblock EGAL(on_vient_de_rencontrer_une_apostrophe,NOTL(on_vient_de_rencontrer_une_apostrophe)); /* On gere les apostrophes comme des parentheses... */ Eblock ATes Bblock Eblock ETes Test(I3ET(IFEQ(caractere_courant,K_ANTI_QUOTE) ,EST_FAUX(on_vient_de_rencontrer_une_apostrophe) ,EST_FAUX(on_vient_de_rencontrer_une_quote) ) ) Bblock EGAL(on_vient_de_rencontrer_une_anti_quote,NOTL(on_vient_de_rencontrer_une_anti_quote)); /* On gere les anti-quotes comme des parentheses... */ Eblock ATes Bblock Eblock ETes Test(IFET(IFEQ(caractere_courant,K_LF) ,I3OU(EST_VRAI(on_vient_de_rencontrer_une_apostrophe) ,EST_VRAI(on_vient_de_rencontrer_une_quote) ,EST_VRAI(on_vient_de_rencontrer_une_anti_quote) ) ) ) Bblock /* Les caracteres 'K_LF' a l'interieur d'une chaine de caracteres ne sont pas transmis... */ Eblock ATes Bblock CALS(Putchar(caractere_courant)); /* Les caracteres sont transmis sauf s'il s'agit d'un 'K_LF' a l'interieur d'une chaine */ /* de caracteres... */ Test(IFEQ(caractere_courant,K_LF)) Bblock Test(IFGT(nombre_de_caracteres_de_la_ligne_courante,longueur_d_avertissement)) Bblock PRINT_ATTENTION("trop de caracteres ont ete mis sur la derniere ligne generee"); Eblock ATes Bblock Eblock ETes CLIR(nombre_de_caracteres_de_la_ligne_courante); /* Initialisation du nombre de caracteres de la ligne suivante... */ Eblock ATes Bblock INCR(nombre_de_caracteres_de_la_ligne_courante,I); /* Comptage des caracteres de la ligne courante... */ Eblock ETes Eblock ETes Eblock ETan RETU_Commande; Eblock ECommande