void main() { struct dosdate_t date; struct dostime_t time; /* Get and display the current date and time */ _dos_getdate( &date ); _dos_gettime( &time ); printf( "The date (MM-DD-YYYY) is: %d-%d-%d\n", date.month, date.day, date.year ); printf( "The time (HH:MM:SS) is: %.2d:%.2d:%.2d\n", time.hour, time.minute, time.second ); /* Change it to the turn of the century */ date.year = 1999; date.month = 12; date.day = 31; time.hour = 23; time.minute = 59; _dos_setdate( &date ); _dos_settime( &time ); printf( "New date (MM-DD-YYYY) is: %d-%d-%d\n", date.month, date.day, date.year ); printf( "New time (HH:MM:SS) is: %.2d:%.2d:%.2d\n", time.hour, time.minute, time.second ); }
int settimeofday (struct timeval *tv, ...) { if (tv) { time_t t = (time_t)tv->tv_sec; struct tm *tmp = localtime (&t); if (tmp->tm_year >= 80) { /* every dosish OS should have these. * TurboC/BorlandC, WatcomC and DJGPP definitely do. */ struct dosdate_t newdate; struct dostime_t newtime; newdate.year = (WORD)(tmp->tm_year + 1900); newdate.month = (BYTE)(tmp->tm_mon + 1); newdate.day = (BYTE)(tmp->tm_mday); newtime.hour = (BYTE)(tmp->tm_hour); newtime.minute = (BYTE)(tmp->tm_min); newtime.second = (BYTE)(tmp->tm_sec); newtime.hsecond = (BYTE)(tv->tv_usec / 10000ul); if (_dos_setdate(&newdate) == 0 && /* int 21h fxn 2Bh */ _dos_settime(&newtime) == 0) /* int 21h fxn 2Dh */ return (0); } } errno = EINVAL; return (-1); }
int parsedate(char *s) { struct dosdate_t d; unsigned char leap; int nums[3], items; assert(s); /* Parse at maximum three numbers */ s = parsenum(s, 3, &items, nums); if (!s || *s) /* general error or too many characters */ return 0; _dos_getdate(&d); /* fetch current info */ switch (items) { case 0: /* empty line --> always OK */ return 1; case 1: /* single number --> day only */ d.day = nums[0]; break; case 3: /* three numbers --> year, month & day */ d.year = nums[2]; /* fall through */ case 2: /* two numbers --> month & day */ d.day = nums[1], d.month = nums[0]; break; } /* if only entered two digits for year, assume 1900's */ if (d.year <= 99) d.year += 1900; leap = (!(d.year % 4) && (d.year % 100)) || !(d.year % 400); if ((d.month >= 1 && d.month <= 12) && (d.day >= 1 && d.day <= months[leap][d.month]) && (d.year >= 1980 && d.year <= 2099)) { _dos_setdate(&d); return 1; } return 0; }
int settimeofday (struct timeval *tv,struct timezone *tz) { #if defined(_WIN32) SYSTEMTIME bigTime; struct tm* myCUT; // OSVERSIONINFO myVInfo; /* in this case, we want to STAY in universal time anyhow */ myCUT = gmtime(&(tv->tv_sec)); if (myCUT == NULL) return 0; bigTime.wYear = 1900+myCUT->tm_year; bigTime.wMonth = 1+myCUT->tm_mon; /* wDayOfWeek is supposedly ignored for SetSystemTime, but we have it.. */ bigTime.wDayOfWeek = myCUT->tm_wday; bigTime.wDay = myCUT->tm_mday; bigTime.wHour = myCUT->tm_hour; bigTime.wMinute = myCUT->tm_min; bigTime.wSecond = myCUT->tm_sec; bigTime.wMilliseconds = 0; /* under NT, SetSystemTime requires privileges */ /* myVINfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&myVInfo); if (myVInfo.dwPlatformId == VER_PLATFORM_WIN32_NT) */ if (!SetSystemTime(&bigTime)) return 0; #else struct _dostime_t dostime; struct _dosdate_t dosdate; struct tm *newtime; newtime = localtime((time_t *)&(tv->tv_sec)); dostime.hour = newtime->tm_hour; dostime.minute = newtime->tm_min; dostime.second = newtime->tm_sec; dostime.hsecond = 0; dosdate.day = newtime->tm_mday; dosdate.month = 1+newtime->tm_mon; /* burp! Microsft really sucks */ dosdate.year = 1900+newtime->tm_year; /* burp! Microsoft sucks again... */ dosdate.dayofweek = newtime->tm_wday; if (_dos_setdate(&dosdate) == 0 && _dos_settime(&dostime) == 0) return 0; #endif return 1; }
int qse_settime (const qse_ntime_t* t) { #if defined(_WIN32) FILETIME ft; SYSTEMTIME st; /**((qse_int64_t*)&ft) = ((t + EPOCH_DIFF_MSECS) * (10 * 1000));*/ *((qse_int64_t*)&ft) = (QSE_SEC_TO_NSEC(t->sec + EPOCH_DIFF_SECS) / 100) + (t->nsec / 100); if (FileTimeToSystemTime (&ft, &st) == FALSE) return -1; if (SetSystemTime(&st) == FALSE) return -1; return 0; #elif defined(__OS2__) APIRET rc; DATETIME dt; qse_btime_t bt; if (qse_localtime (t, &bt) <= -1) return -1; QSE_MEMSET (&dt, 0, QSE_SIZEOF(dt)); dt.year = bt.year + QSE_BTIME_YEAR_BASE; dt.month = bt.mon + 1; dt.day = bt.mday; dt.hours = bt.hour; dt.minutes = bt.min; dt.seconds = bt.sec; dt.hundredths = QSE_NSEC_TO_MSEC(t->nsec) / 10; rc = DosSetDateTime (&dt); return (rc != NO_ERROR)? -1: 0; #elif defined(__DOS__) struct dostime_t dt; struct dosdate_t dd; qse_btime_t bt; if (qse_localtime (t, &bt) <= -1) return -1; dd.year = bt.year + QSE_BTIME_YEAR_BASE; dd.month = bt.mon + 1; dd.day = bt.mday; dt.hour = bt.hour; dt.minute = bt.min; dt.second = bt.sec; dt.hsecond = QSE_NSEC_TO_MSEC(t->nsec) / 10; if (_dos_settime (&dt) != 0) return -1; if (_dos_setdate (&dd) != 0) return -1; return 0; #elif defined(HAVE_SETTIMEOFDAY) struct timeval tv; int n; tv.tv_sec = t->sec; tv.tv_usec = QSE_NSEC_TO_USEC(t->nsec); /* #if defined(CLOCK_REALTIME) && defined(HAVE_CLOCK_SETTIME) { int r = clock_settime (CLOCK_REALTIME, ts); if (r == 0 || errno == EPERM) return r; } #elif defined(HAVE_STIME) return stime (&ts->tv_sec); #else */ n = QSE_SETTIMEOFDAY (&tv, QSE_NULL); if (n == -1) return -1; return 0; #else time_t tv; tv = t->sec; return (QSE_STIME (&tv) == -1)? -1: 0; #endif }