/* 10/08/88 : Jacques Gelinas Conversion de dates */ #include #include #include #include #include #include #include "tool.h" #define cnvu(h,m,s) (((h)<<11) + (m<<5) +s/2) /* Retourne le temps courant dans un unsigned Utilise le format de DOS */ export short unsigned time_currentu(void) { long curt = time(NULL); struct tm *d = localtime (&curt); return ((short unsigned)cnvu(d->tm_hour,d->tm_min,d->tm_sec)); } /* InterprŠte une chaine ascii et retourne un temps unsigned selon le format DOS La chaine est du type hh[:mm[:ss]] */ export short unsigned time_a2u0 (const char *time, char separ) { unsigned h,m,s; h = m = s = 0; if (isdigit(*time)){ h = atoi (time); time = str_skipdig(time); if (*time == separ){ time++; m = atoi (time); time = str_skipdig(time); if (*time == separ){ s = atoi (time+1); } } } return ((short unsigned) cnvu (h,m,s)); } /* InterprŠte une chaine ascii et retourne un temps unsigned selon le format DOS La chaine est du type hh[:mm[:ss]] */ export short unsigned time_a2u (const char *time) { return time_a2u0 (time,':'); } /* Convertit une temps de fichier Retourne le nombre de byte ecrit */ export int time_u2a0 (short unsigned time, char *str, char separ) { int nb = sprintf (str,"%02d%c%02d%c%02d" ,(time>>11) ,separ ,(time>>5) & 0x3f ,separ ,(time&0x1f)*2); return (nb); } /* Convertit une temps de fichier Retourne le nombre de byte ecrit */ export int time_u2a (short unsigned time, char *str) { return time_u2a0 (time,str,':'); } #ifdef TEST void main (void) { char str[20]; short unsigned int res = time_a2u("10:20"); int nb = time_u2a (res,str); printf ("nb = %d :%s:\n",nb,str); res = time_a2u("1:2"); nb = time_u2a (res,str); printf ("nb = %d :%s:\n",nb,str); res = time_currentu(); nb = time_u2a (res,str); printf ("nb = %d :%s:\n",nb,str); } #endif