depre.c (2207B)
1 /* depre, afficher la date et l'heure selon la représentation hexadécimale du 2 * temps dêpre 3 * par ldp <ldp@asteride.xyz> 4 * Ce programme est distribué sous la licence libre GPLv3 5 */ 6 7 #include <assert.h> 8 #include <stdio.h> 9 #include <stdlib.h> 10 #include <time.h> 11 #include <unistd.h> 12 13 #include "commun.h" 14 15 /* nombre de secondes dans une journée */ 16 #define SEC_JOUR 86400 17 18 /* nombre de barres dans une journée */ 19 #define BAR_JOUR (16 * 16 * 16) 20 21 static void utilisation(FILE *f); 22 static void version(void); 23 24 char *nom_prog; 25 26 int 27 main(int argc, char **argv) 28 { 29 int opt; 30 time_t zero, secondes; 31 unsigned jours, barres; 32 char *signe, *var; 33 34 var = NULL; 35 36 /* obtenir le nom du programme */ 37 if ((nom_prog = argv[0]) == NULL || nom_prog[0] == '\0') 38 nom_prog = "depre"; 39 40 /* nombre de secondes depuis le zéro Unix */ 41 secondes = time(NULL); 42 43 opterr = 0; /* ne pas afficher le message d'erreur par défaut */ 44 while ((opt = getopt(argc, argv, "s:z:Vh")) != -1) { 45 switch (opt) { 46 case 's': 47 if (ccvt(optarg, &secondes) < 0) 48 goto erreur; 49 break; 50 case 'z': 51 var = optarg; 52 break; 53 case 'V': 54 version(); 55 return 0; 56 case 'h': 57 utilisation(stdout); 58 return 0; 59 default: 60 goto erreur; 61 } 62 } 63 64 /* il ne doit plus rester d'arguments à traiter */ 65 if (argc - optind != 0) 66 goto erreur; 67 68 /* si l'option -z n'a pas été utilisée, voir si la variable 69 * d'environnement DEPRE_ZERO est réglée. */ 70 if (var == NULL) 71 var = getenv("DEPRE_ZERO"); 72 /* si l'option -z ou la variable d'environnement DEPRE_ZERO ont une 73 * valeur, tenter de convertir leur valeur en nombre. */ 74 if (var != NULL) { 75 if (ccvt(var, &zero) < 0) 76 goto erreur; 77 } else { /* sinon, utiliser la valeur par défaut */ 78 zero = ZERO_DEF; 79 } 80 81 if (depre(zero, secondes, &jours, &barres) < 0) 82 signe = "-"; 83 else 84 signe = ""; 85 86 /* afficher la date d'aujourd'hui */ 87 printf("%s%x.%x\n", signe, jours, barres); 88 89 return 0; 90 91 erreur: 92 utilisation(stderr); 93 return 1; 94 } 95 96 static void 97 utilisation(FILE *f) 98 { 99 fprintf(f, "Utilisation: %s [-s secondes] [-z zéro] [-V] [-h]\n", nom_prog); 100 } 101 102 static void 103 version(void) 104 { 105 fprintf(stdout, "%s " VERSION "\n", nom_prog); 106 }