depre

Afficher la date et l'heure hexadécimale
git clone git://git.asteride.xyz/depre.git
Journaux | Fichiers | Références | LISEZ-MOI | LICENCE

commit c16b42e7d7ddbef0dee316dd2cbf28e354a63061
parent 9cc3b4c1bebeb77d877266a7ef7ae0d1f80e6096
Auteur: ldp <ldp@asteride.xyz>
Date:   Tue,  9 Dec 2025 16:40:47 -0500

[sty] Réorganiser les sources

Diffstat:
MMakefile | 6+++---
Acommun.c | 67+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acommun.h | 10++++++++++
Mdepre.c | 64+++++++++-------------------------------------------------------
4 fichiers modifiés, 89 insertions(+), 58 suppressions(-)

diff --git a/Makefile b/Makefile @@ -19,8 +19,8 @@ LANG_MAN != ls "${DOS_MAN}" all: depre -depre: depre.o - ${CC} ${COPTS} -o "$@" depre.o +depre: depre.o commun.o + ${CC} ${COPTS} -o "$@" depre.o commun.o inst_man: for L in ${LANG_MAN} ; \ @@ -36,5 +36,5 @@ install: all inst_man uninstall: rm -f ${BIN_DOS}/depre -clean: +net: rm -f depre *.o *.core diff --git a/commun.c b/commun.c @@ -0,0 +1,67 @@ +#include <assert.h> +#include <time.h> + +#include <stdio.h> + +#include "commun.h" + +/* nombre de secondes dans une journée */ +#define SEC_JOUR 86400 + +/* nombre de barres dans une journée */ +#define BAR_JOUR (16 * 16 * 16) + +/* calculer le nombre de jours et de barres entre zéro et secondes. + * 0 lorsque la différence est positive et -1 lorsqu’elle est négative. */ +int +depre(time_t zero, time_t secondes, unsigned *jours, unsigned *barres) +{ + int signe = 0; + + /* nombre de secondes écoulées depuis le zéro dêpre */ + secondes = secondes - zero; + + /* si la date et l’heure sont antérieures au zéro, quelques ajustements + * doivent être faits */ + if (secondes < 0) { + signe = -1; + secondes *= -1; + } + + /* nombre de jours complets écoulés */ + *jours = (unsigned) secondes / SEC_JOUR; + + /* secondes restantes */ + secondes -= *jours * SEC_JOUR; + + /* nombre de barres restantes */ + *barres = (unsigned) secondes * BAR_JOUR / SEC_JOUR; + + return signe; +} + +/* convertir une chaîne de caractères en nombre */ +int +ccvt(char *cc, time_t *rep) +{ + int signe; + + assert(cc != NULL); + + *rep = 0; + signe = 1; + if (*cc == '-') { + signe = -1; + cc++; + } + + for (;*cc != '\0'; cc++) { + if (*cc < '0' || *cc > '9') + return -1; + *rep = *rep * 10 + *cc - '0'; + } + + *rep *= signe; + + return 0; +} diff --git a/commun.h b/commun.h @@ -0,0 +1,10 @@ +#ifndef COMMUN_H +#define COMMUN_H + +/* nombre de secondes entre le zéro Unix et zéro depre, par défaut */ +#define ZERO_DEF (11138 * 60 * 60 * 24 + 3600 * 4) + +int depre(time_t zero, time_t secondes, unsigned *jours, unsigned *barres); +int ccvt(char *, time_t *); + +#endif diff --git a/depre.c b/depre.c @@ -10,6 +10,8 @@ #include <time.h> #include <unistd.h> +#include "commun.h" + /* nombre de secondes entre le zéro Unix et zéro depre, par défaut */ #define ZERO_DEF (11138 * 60 * 60 * 24 + 3600 * 4) @@ -21,20 +23,16 @@ static void utilisation(FILE *f); static void version(void); -static int ccvt(char *cc, time_t *rep); -static int secbar(time_t sec); char *nom_prog; int main(int argc, char **argv) { - int opt; - time_t zero; - time_t secondes; - unsigned int jours; - char *signe; - char *var; + int opt; + time_t zero, secondes; + unsigned jours, barres; + char *signe, *var; var = NULL; @@ -83,23 +81,13 @@ main(int argc, char **argv) zero = ZERO_DEF; } - /* nombre de secondes écoulées depuis le zéro depre */ - secondes = secondes - zero; - /* si la date et l'heure sont antérieures au zéro, quelques ajustements - * doivent être faits */ - if (secondes < 0) { + if (depre(zero, secondes, &jours, &barres) < 0) signe = "-"; - secondes *= -1; - } else { + else signe = ""; - } - /* nombre de jours complets écoulés */ - jours = secondes / SEC_JOUR; - /* nombre de secondes écoulées aujourd'hui */ - secondes -= jours * SEC_JOUR; /* afficher la date d'aujourd'hui */ - printf("%s%x.%x\n", signe, jours, secbar(secondes)); + printf("%s%x.%x\n", signe, jours, barres); return 0; @@ -119,37 +107,3 @@ version(void) { fprintf(stdout, "%s " VERSION "\n", nom_prog); } - -/* convertir une chaîne de caractères en nombre */ -static int -ccvt(char *cc, time_t *rep) -{ - int signe; - - assert(cc != NULL); - - *rep = 0; - signe = 1; - if (*cc == '-') { - signe = -1; - cc++; - } - - for (;*cc != '\0'; cc++) { - if (*cc < '0' || *cc > '9') - return -1; - *rep = *rep * 10 + *cc - '0'; - } - - *rep *= signe; - - return 0; -} - -/* convertir secondes en barres */ -/* renvoie un int, car il y a 4096 barres dans une journée */ -static int -secbar(time_t sec) -{ - return (int) (sec * BAR_JOUR / SEC_JOUR); -}