| /* |
| * CRTDLL date/time functions |
| * |
| * Copyright 1996,1998 Marcus Meissner |
| * Copyright 1996 Jukka Iivonen |
| * Copyright 1997,2000 Uwe Bonnes |
| * Copyright 2000 Jon Griffiths |
| * |
| * Implementation Notes: |
| * MT Safe. |
| */ |
| |
| #include "crtdll.h" |
| #include "process.h" |
| #include <stdlib.h> |
| #include <sys/times.h> |
| |
| |
| DEFAULT_DEBUG_CHANNEL(crtdll); |
| |
| |
| /* INTERNAL: Return formatted current time/date */ |
| static LPSTR __CRTDLL__get_current_time(LPSTR out, const char * format); |
| static LPSTR __CRTDLL__get_current_time(LPSTR out, const char * format) |
| { |
| time_t t; |
| struct tm *_tm; |
| |
| if ((time(&t) != ((time_t)-1)) && |
| ((_tm = localtime(&t)) != 0) && |
| (strftime(out,9,format,_tm) == 8)) |
| { |
| CRTDLL_free(_tm); |
| return out; |
| } |
| |
| return NULL; |
| } |
| |
| |
| /********************************************************************* |
| * _ftime (CRTDLL.112) |
| * |
| * Get current time. |
| */ |
| VOID __cdecl CRTDLL__ftime (struct _timeb* t) |
| { |
| t->time = CRTDLL_time(NULL); |
| t->millitm = 0; /* FIXME */ |
| t->timezone = 0; |
| t->dstflag = 0; |
| } |
| |
| |
| /********************************************************************** |
| * _strdate (CRTDLL.283) |
| * |
| * Return the current date as MM/DD/YY - (American Format) |
| */ |
| LPSTR __cdecl CRTDLL__strdate (LPSTR date) |
| { |
| return __CRTDLL__get_current_time(date,"%m/%d/%y"); |
| } |
| |
| |
| /********************************************************************* |
| * _strtime (CRTDLL.299) |
| * |
| * Return the current time as HH:MM:SS |
| */ |
| LPSTR __cdecl CRTDLL__strtime (LPSTR date) |
| { |
| return __CRTDLL__get_current_time(date,"%H:%M:%S"); |
| } |
| |
| |
| /********************************************************************* |
| * clock (CRTDLL.350) |
| */ |
| clock_t __cdecl CRTDLL_clock(void) |
| { |
| struct tms alltimes; |
| clock_t res; |
| |
| times(&alltimes); |
| res = alltimes.tms_utime + alltimes.tms_stime+ |
| alltimes.tms_cutime + alltimes.tms_cstime; |
| /* Fixme: We need some symbolic representation |
| for (Hostsystem_)CLOCKS_PER_SEC |
| and (Emulated_system_)CLOCKS_PER_SEC |
| 10 holds only for Windows/Linux_i86) |
| */ |
| return 10*res; |
| } |
| |
| |
| /********************************************************************* |
| * difftime (CRTDLL.357) |
| */ |
| double __cdecl CRTDLL_difftime (time_t time1, time_t time2) |
| { |
| double timediff; |
| |
| timediff = (double)(time1 - time2); |
| return timediff; |
| } |
| |
| |
| /********************************************************************* |
| * time (CRTDLL.488) |
| */ |
| time_t __cdecl CRTDLL_time(time_t *timeptr) |
| { |
| time_t curtime = time(NULL); |
| |
| if (timeptr) |
| *timeptr = curtime; |
| return curtime; |
| } |