Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. #include <time.h>
  2. #include <assert.h>
  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. }
  36.