commun.c (1273B)
1 #include <assert.h> 2 #include <time.h> 3 4 #include "commun.h" 5 6 /* nombre de secondes dans une journée */ 7 #define SEC_JOUR 86400 8 9 /* nombre de barres dans une journée */ 10 #define BAR_JOUR (16 * 16 * 16) 11 12 /* calculer le nombre de jours et de barres entre zéro et secondes. 13 * 0 lorsque la différence est positive et -1 lorsqu’elle est négative. */ 14 int 15 depre(time_t zero, time_t secondes, unsigned *jours, unsigned *barres) 16 { 17 int signe = 0; 18 19 /* nombre de secondes écoulées depuis le zéro dêpre */ 20 secondes = secondes - zero; 21 22 /* si la date et l’heure sont antérieures au zéro, quelques ajustements 23 * doivent être faits */ 24 if (secondes < 0) { 25 signe = -1; 26 secondes *= -1; 27 } 28 29 /* nombre de jours complets écoulés */ 30 *jours = (unsigned) secondes / SEC_JOUR; 31 32 /* secondes restantes */ 33 secondes -= *jours * SEC_JOUR; 34 35 /* nombre de barres restantes */ 36 *barres = (unsigned) secondes * BAR_JOUR / SEC_JOUR; 37 38 return signe; 39 } 40 41 /* convertir une chaîne de caractères en nombre */ 42 int 43 ccvt(char *cc, time_t *rep) 44 { 45 int signe; 46 47 assert(cc != NULL); 48 49 *rep = 0; 50 signe = 1; 51 if (*cc == '-') { 52 signe = -1; 53 cc++; 54 } 55 56 for (;*cc != '\0'; cc++) { 57 if (*cc < '0' || *cc > '9') 58 return -1; 59 *rep = *rep * 10 + *cc - '0'; 60 } 61 62 *rep *= signe; 63 64 return 0; 65 }