commit 3a27b64a107f91c439671aa06b55f925f096a0d1
parent 8d99bf2dc59548e47b645eec04608e9b0fb40c33
Auteur: ldp <ldp@asteride.xyz>
Date: Thu, 8 Aug 2024 10:59:36 -0400
réglage du zéro
Il peut être réglé par une variable d'environnement ou par une option donnée en
ligne de commandes.
Diffstat:
M | depre.c | | | 45 | +++++++++++++++++++++++++++++++++++---------- |
1 file changed, 35 insertions(+), 10 deletions(-)
diff --git a/depre.c b/depre.c
@@ -10,8 +10,8 @@
#include <time.h>
#include <unistd.h>
-/* nombre de secondes entre l'époque Unix et l'époque depre */
-#define INTERVALLE (11138 * 60 * 60 * 24 + 3600 * 4)
+/* nombre de secondes entre le zéro Unix et zéro depre, par défaut */
+#define ZERO_DEF (11138 * 60 * 60 * 24 + 3600 * 4)
static void utilisation(FILE *f);
static void version(void);
@@ -22,23 +22,32 @@ char *nom_prog;
int
main(int argc, char **argv)
{
- int opt;
- time_t secondes;
+ int opt;
+ time_t zero;
+ time_t secondes;
unsigned int jours;
- char *signe;
+ char *signe;
+ char *var;
+ var = NULL;
+
+ /* obtenir le nom du programme */
if ((nom_prog = argv[0]) == NULL || nom_prog[0] == '\0')
nom_prog = "depre";
+ /* nombre de secondes depuis le zéro Unix */
secondes = time(NULL);
- opterr = 0;
- while ((opt = getopt(argc, argv, "s:Vh")) != -1) {
+ opterr = 0; /* ne pas afficher le message d'erreur par défaut */
+ while ((opt = getopt(argc, argv, "s:z:Vh")) != -1) {
switch (opt) {
case 's':
if (ccvt(optarg, &secondes) < 0)
goto erreur;
break;
+ case 'z':
+ var = optarg;
+ break;
case 'V':
version();
return 0;
@@ -50,11 +59,27 @@ main(int argc, char **argv)
}
}
+ /* il ne doit plus rester d'arguments à traiter */
if (argc - optind != 0)
goto erreur;
- /* nombre de secondes écoulées depuis l'époque depre */
- secondes = secondes - INTERVALLE;
+ /* si l'option -z n'a pas été utilisée, voir si la variable
+ * d'environnement DEPRE_ZERO est réglée. */
+ if (var == NULL)
+ var = getenv("DEPRE_ZERO");
+ /* si l'option -z ou la variable d'environnement DEPRE_ZERO ont une
+ * valeur, tenter de convertir leur valeur en nombre. */
+ if (var != NULL) {
+ if (ccvt(var, &zero) < 0)
+ goto erreur;
+ } else { /* sinon, utiliser la valeur par défaut */
+ 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) {
signe = "-";
secondes *= -1;
@@ -79,7 +104,7 @@ erreur:
static void
utilisation(FILE *f)
{
- fprintf(f, "Utilisation: %s [-r secondes] [-V] [-h]\n", nom_prog);
+ fprintf(f, "Utilisation: %s [-r secondes] [-z zéro] [-V] [-h]\n", nom_prog);
}
static void