depre

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

commit d9e9e6a8c4dc0efa3c001d98e820bb61d872c138
parent 2a8134bf001ef4808c78f56e505d2b8d8c60f805
Auteur: ldp <ldp@asteride.xyz>
Date:   Wed,  7 Aug 2024 12:16:55 -0400

ajout des options -r et -h

Diffstat:
Mdax.c | 73+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 71 insertions(+), 2 deletions(-)

diff --git a/dax.c b/dax.c @@ -3,20 +3,54 @@ * Ce programme est distribué sous la licence libre GPLv3 */ +#include <assert.h> #include <stdio.h> +#include <stdlib.h> #include <time.h> +#include <unistd.h> /* nombre de secondes entre l'époque Unix et l'époque dax */ #define NSECS (11138 * 60 * 60 * 24 + 3600 * 4) +static void utilisation(FILE *f); +static int ccvt(char *cc, time_t *rep); + +char *nom_prog; + int -main(void) +main(int argc, char **argv) { + int opt; time_t secondes; unsigned int jours; + if ((nom_prog = argv[0]) == NULL || nom_prog[0] == '\0') + nom_prog = "dax"; + + secondes = time(NULL); + + opterr = 0; + while ((opt = getopt(argc, argv, "r:h")) != -1) { + switch (opt) { + case 'r': + if (ccvt(optarg, &secondes) < 0) + goto erreur; + break; + case 'h': + utilisation(stdout); + return 0; + default: + goto erreur; + } + } + + if (argc - optind != 0) + goto erreur; + /* nombre de secondes écoulées depuis l'époque dax */ - secondes = time(NULL) - NSECS; + secondes = secondes - NSECS; + if (secondes < 0) + goto erreur; /* nombre de jours complets écoulés */ jours = secondes / 86400; /* nombre de secondes écoulées aujourd'hui */ @@ -26,4 +60,39 @@ main(void) printf("%x.%llx\n", jours, secondes * (16 * 16 * 16) / 86400); return 0; + +erreur: + utilisation(stderr); + return 1; +} + +static void +utilisation(FILE *f) +{ + fprintf(f, "Utilisation: %s [-r secondes] [-h]\n", nom_prog); +} + +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; }