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

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 }