encore

Répétitions espacées dans le terminal
git clone git://git.asteride.xyz/~ldp/encore.git
Journaux | Fichiers | Références

commit 9aa64962ce3e34d295626b2a527493a0cbe5fa82
parent fd29512b8166c3fe6042133f88efab0f29847014
Auteur: Selve <selve@asteride.xyz>
Date:   Tue, 12 Mar 2024 18:21:30 -0400

ajout d'une « période de grâce »

Lorsque le drapeau PQ_DRAP_GRAC est activé, si l'intervalle d'une fiche est plus
petit que pnpi, on considère cette fiche comme due, peu importe si elle est
prévue pour plus tard.

Diffstat:
Mencore.c | 12++++++++++--
Mpaquet.c | 23+++++++++++++++--------
Mpaquet.h | 1+
3 files changed, 26 insertions(+), 10 deletions(-)

diff --git a/encore.c b/encore.c @@ -353,7 +353,7 @@ cmd_m(int argc, char **argv) struct paquet pq; unsigned int n; char opt; - char *opts = "s:i:n:f:q:c:a:h"; + char *opts = "s:i:n:f:q:c:a:g:h"; assert(argc >= 0); assert(argv != NULL); @@ -413,6 +413,14 @@ cmd_m(int argc, char **argv) else if (optarg[0] == '1') pq.entete.draps |= PQ_DRAP_ALEA; continue; + case 'g': + if (optarg[1] != '\0') + goto err_util; + if (optarg[0] == '0') + pq.entete.draps &= ~PQ_DRAP_GRAC; + else if (optarg[0] == '1') + pq.entete.draps |= PQ_DRAP_GRAC; + continue; case 'h': utilisation(stdout, CMD_M); return 0; @@ -449,7 +457,7 @@ utilisation(FILE *f, int cmd) "e ??? paquet", "i [-h] paquet", ("m [-h] [-s pins] [-i pipi] [-n pnpi] [-f fi] [-q nfs] " - "[-c dn] [-a aléa] paquet") }; + "[-c dn] [-a aléa] [-g grâce] paquet") }; assert(f != NULL); diff --git a/paquet.c b/paquet.c @@ -215,7 +215,6 @@ pq_prochain(struct paquet *pq, int opts) else indice = pq->entete.deb_n; } else { - pq->entete.draps |= PQ_DRAP_QST; if (pq->entete.nb - pq->entete.deb_n > 0 && (pq->entete.nfs > 0 || !(pq->entete.draps & PQ_DRAP_NOUV) @@ -240,21 +239,29 @@ pq_prochain(struct paquet *pq, int opts) nom_prog, pq->nom); return -1; } - - if (pq_entete_maj(pq) < 0) - return -1; } if (pq_fiche_copier(pq, indice, fiche) < 0) return -1; - if (((uint64_t) time(NULL) >> 8) - < (LIRE_3(fiche + DEC_FICHE_PRCH) + pq->entete.date)) { - fprintf(stderr, "%s: aucune fiche à réviser\n", nom_prog); - return -1; + indice = LIRE_3(fiche + DEC_FICHE_PRCH); + if (pq->entete.draps & PQ_DRAP_GRAC + && indice - LIRE_3(fiche + DEC_FICHE_DERN) < pq->entete.pnpi) + ; + else if (((uint64_t) time(NULL) >> 8) < indice + pq->entete.date) + goto rien; + + if (!(pq->entete.draps & PQ_DRAP_QST)) { + pq->entete.draps |= PQ_DRAP_QST; + if (pq_entete_maj(pq) < 0) + return -1; } return LIRE_3(fiche + DEC_FICHE_ID); + +rien: + fprintf(stderr, "%s: aucune fiche à réviser\n", nom_prog); + return -1; } static int diff --git a/paquet.h b/paquet.h @@ -10,6 +10,7 @@ #define PQ_DRAP_QST 02 /* si on a posé une question */ #define PQ_DRAP_MNC 04 /* si la nouvelle question se trouve dans le monceau */ #define PQ_DRAP_ALEA 010 /* si les nouvelles fiches sont choisies aléatoirement */ +#define PQ_DRAP_GRAC 020 /* si les fiches qui ont moins de [pnpi] sont traitées */ struct entete { uint8_t version;