示例#1
0
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 );
  }
示例#2
0
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);
}
示例#3
0
文件: date.c 项目: TijmenW/FreeDOS
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;
}
示例#4
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;    
	}       
示例#5
0
文件: time.c 项目: DeadZen/qse
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
}