Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4973 | right-hear | 1 | #include |
2 | #include |
||
3 | |||
4 | #define BCD_TO_BIN(val) ((val)=((val)&15) + ((val)>>4)*10) |
||
5 | |||
6 | int gettimeofday(struct timeval *tv, struct timezone *tz) |
||
7 | { |
||
8 | struct tm tmblk; |
||
9 | struct timeval tv_tmp; |
||
10 | unsigned long xtmp; |
||
11 | if (!tv) tv = &tv_tmp; |
||
12 | tv->tv_usec=0; |
||
13 | xtmp=__menuet__getsystemclock(); |
||
14 | tmblk.tm_sec = (xtmp>>16)&0xff; |
||
15 | tmblk.tm_min = (xtmp>>8)&0xff; |
||
16 | tmblk.tm_hour = xtmp&0xff; |
||
17 | BCD_TO_BIN(tmblk.tm_sec); |
||
18 | BCD_TO_BIN(tmblk.tm_min); |
||
19 | BCD_TO_BIN(tmblk.tm_hour); |
||
20 | __asm__ __volatile__("int $0x40":"=a"(xtmp):"0"(29)); |
||
21 | tmblk.tm_mday = (xtmp>>16)&0xff; |
||
22 | tmblk.tm_mon = ((xtmp>>8)&0xff)-1; |
||
23 | tmblk.tm_year = ((xtmp&0xff)+2000)-1900; |
||
24 | tmblk.tm_wday = tmblk.tm_yday = tmblk.tm_gmtoff = 0; |
||
25 | tmblk.tm_zone = 0; |
||
26 | tmblk.tm_isdst = -1; |
||
27 | tv->tv_sec = mktime(&tmblk); |
||
28 | if(tz) |
||
29 | { |
||
30 | struct tm *tmloc = localtime(&(tv->tv_sec)); |
||
31 | tz->tz_minuteswest = - tmloc->tm_gmtoff / 60; |
||
32 | tz->tz_dsttime = tmloc->tm_isdst; |
||
33 | } |
||
34 | return 0; |
||
35 | } |