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:
M | dax.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;
}