aplat

Documents structurés pour Unix
git clone git://git.asteride.xyz/~ldp/aplat.git
Journaux | Fichiers | Références | LISEZ-MOI | LICENCE

commit 2d8b933a598edaa798a38ab6bf0423c16af233ae
parent d1a78f74dfa38310384030820bd7a5994fc12166
Auteur: Loïc Daignault-Pichette <loic@asteride.xyz>
Date:   Fri,  7 Jun 2024 17:57:16 -0400

simplification d'aplatir()

Diffstat:
Maplat.c | 53++++++++++++++++++++++-------------------------------
1 file changed, 22 insertions(+), 31 deletions(-)

diff --git a/aplat.c b/aplat.c @@ -15,10 +15,11 @@ #define TP_ETQ_TLL 128 #define TP_CTN_TLL 256 -#define JT_OUV 0 /* __00 */ -#define JT_FRM 1 /* __01 */ -#define JT_ATM 2 /* __10 */ -#define JT_FRG 3 /* __11 */ +#define JT_RIEN (-1) +#define JT_OUV 0 +#define JT_FRM 1 +#define JT_ATM 2 +#define JT_FRG 3 #define DRAP_FRM 1 #define DRAP_OUV 2 @@ -123,11 +124,11 @@ aplatir(FILE *f) assert(f); + jtp = JT_RIEN; switch (jta = (obt_jeton(f, &tp_etq))) { case JT_OUV: prfd = 0; draps = 0; - tp = &tp_etq; break; case EOF: return 0; @@ -137,30 +138,14 @@ aplatir(FILE *f) return -1; } - while ((jtp = jta) != EOF) { - if (jtp == JT_OUV) - tp = &tp_etq; - while ((jta = obt_jeton(f, tp)) == JT_FRG) { - if (jtp == JT_OUV) { - fprintf(stderr, _("%s: la taille d'une étiquette " - "excède la limite de %d octets\n"), - nom_prog, TP_ETQ_TLL); - return -1; - } - afficher_ligne(&draps, &tp_etq, &tp_ctn); - } - switch (jtp) { + do { + switch (jta) { case JT_OUV: prfd++; - draps |= DRAP_OUV; - switch (jta) { - case JT_OUV: + tp = &tp_etq; + if (jtp == JT_OUV || jtp == JT_ATM) afficher_ligne(&draps, &tp_etq, &tp_ctn); - break; - case JT_ATM: - tp = &tp_ctn; - break; - } + draps |= DRAP_OUV; break; case JT_FRM: draps |= DRAP_FRM; @@ -169,13 +154,19 @@ aplatir(FILE *f) goto fin; break; case JT_ATM: - if (jta == JT_OUV) - afficher_ligne(&draps, &tp_etq, &tp_ctn); + tp = &tp_ctn; break; - default: - assert(0); + case JT_FRG: + if (jtp == JT_OUV) { + fprintf(stderr, _("%s: la taille d'une étiquette " + "excède la limite de %d octets\n"), + nom_prog, TP_ETQ_TLL); + return -1; + } + afficher_ligne(&draps, &tp_etq, &tp_ctn); } - } + jtp = jta; + } while ((jta = obt_jeton(f, tp)) != EOF); fprintf(stderr, _("%s: parenthèses déséquilibrées\n"), nom_prog); return -1;