home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 May / PCWorld_2001-05_cd.bin / Software / Vyzkuste / devc / _SETUP.5 / Group3 / time.h < prev    next >
C/C++ Source or Header  |  1999-11-07  |  5KB  |  221 lines

  1. /* 
  2.  * time.h
  3.  *
  4.  * Date and time functions and types.
  5.  *
  6.  * This file is part of the Mingw32 package.
  7.  *
  8.  * Contributors:
  9.  *  Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
  10.  *
  11.  *  THIS SOFTWARE IS NOT COPYRIGHTED
  12.  *
  13.  *  This source code is offered for use in the public domain. You may
  14.  *  use, modify or distribute it freely.
  15.  *
  16.  *  This code is distributed in the hope that it will be useful but
  17.  *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
  18.  *  DISCLAMED. This includes but is not limited to warranties of
  19.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  20.  *
  21.  * $Revision: 1.10 $
  22.  * $Author: khan $
  23.  * $Date: 1998/09/04 20:10:45 $
  24.  *
  25.  */
  26.  
  27. #ifndef    _TIME_H_
  28. #define    _TIME_H_
  29.  
  30. /* All the headers include this file. */
  31. #include <_mingw.h>
  32.  
  33. #define __need_wchar_t
  34. #define __need_size_t
  35. #ifndef RC_INVOKED
  36. #include <stddef.h>
  37. #endif    /* Not RC_INVOKED */
  38.  
  39. /*
  40.  * Need a definition of time_t.
  41.  */
  42. #include <sys/types.h>
  43.  
  44. /*
  45.  * Number of clock ticks per second. A clock tick is the unit by which
  46.  * processor time is measured and is returned by 'clock'.
  47.  */
  48. #define    CLOCKS_PER_SEC    1000.0
  49. #define    CLK_TCK        CLOCKS_PER_SEC
  50.  
  51.  
  52. #ifndef RC_INVOKED
  53.  
  54. /*
  55.  * A type for storing the current time and date. This is the number of
  56.  * seconds since midnight Jan 1, 1970.
  57.  * NOTE: Normally this is defined by the above include of sys/types.h
  58.  */
  59. #ifndef _TIME_T_
  60. #define _TIME_T_
  61. typedef    long    time_t;
  62. #endif
  63.  
  64. /*
  65.  * A type for measuring processor time (in clock ticks).
  66.  */
  67. #ifndef _CLOCK_T_
  68. #define _CLOCK_T_
  69. typedef    long    clock_t;
  70. #endif
  71.  
  72.  
  73. /*
  74.  * A structure for storing all kinds of useful information about the
  75.  * current (or another) time.
  76.  */
  77. struct tm
  78. {
  79.     int    tm_sec;        /* Seconds: 0-59 (K&R says 0-61?) */
  80.     int    tm_min;        /* Minutes: 0-59 */
  81.     int    tm_hour;    /* Hours since midnight: 0-23 */
  82.     int    tm_mday;    /* Day of the month: 1-31 */
  83.     int    tm_mon;        /* Months *since* january: 0-11 */
  84.     int    tm_year;    /* Years since 1900 */
  85.     int    tm_wday;    /* Days since Sunday (0-6) */
  86.     int    tm_yday;    /* Days since Jan. 1: 0-365 */
  87.     int    tm_isdst;    /* +1 Daylight Savings Time, 0 No DST,
  88.                  * -1 don't know */
  89. };
  90.  
  91. #ifdef    __cplusplus
  92. extern "C" {
  93. #endif
  94.  
  95. clock_t    clock ();
  96. time_t    time (time_t* tp);
  97. double    difftime (time_t t2, time_t t1);
  98. time_t    mktime (struct tm* tmsp);
  99.  
  100. /*
  101.  * These functions write to and return pointers to static buffers that may
  102.  * be overwritten by other function calls. Yikes!
  103.  *
  104.  * NOTE: localtime, and perhaps the others of the four functions grouped
  105.  * below may return NULL if their argument is not 'acceptable'. Also note
  106.  * that calling asctime with a NULL pointer will produce an Invalid Page
  107.  * Fault and crap out your program. Guess how I know. Hint: stat called on
  108.  * a directory gives 'invalid' times in st_atime etc...
  109.  */
  110. char*        asctime (const struct tm* tmsp);
  111. char*        ctime (const time_t* tp);
  112. struct tm*    gmtime (const time_t* tm);
  113. struct tm*    localtime (const time_t* tm);
  114.  
  115.  
  116. size_t    strftime (char* caBuffer, size_t sizeMax, const char* szFormat,
  117.           const struct tm* tpPrint);
  118.  
  119. size_t    wcsftime (wchar_t* wcaBuffer, size_t sizeMax,
  120.           const wchar_t* wsFormat, const struct tm* tpPrint);
  121.  
  122. #ifndef __STRICT_ANSI__
  123. extern void    _tzset (void);
  124.  
  125. #ifndef _NO_OLDNAMES
  126. extern void    tzset (void);
  127. #endif
  128.  
  129. size_t    strftime(char*, size_t, const char*, const struct tm*);
  130. char*    _strdate(char*);
  131. char*    _strtime(char*);
  132.  
  133. #endif    /* Not __STRICT_ANSI__ */
  134.  
  135. /*
  136.  * _daylight: non zero if daylight savings time is used.
  137.  * _timezone: difference in seconds between GMT and local time.
  138.  * _tzname: standard/daylight savings time zone names (an array with two
  139.  *          elements).
  140.  */
  141. #ifdef __MSVCRT__
  142.  
  143. /* These are for compatibility with pre-VC 5.0 suppied MSVCRT. */
  144. extern int*    __p__daylight (void);
  145. extern long*    __p__timezone (void);
  146. extern char**    __p__tzname (void);
  147.  
  148. __MINGW_IMPORT int    _daylight;
  149. __MINGW_IMPORT long    _timezone;
  150. __MINGW_IMPORT char     *_tzname[2];
  151.  
  152. #else /* not __MSVCRT (ie. crtdll) */
  153.  
  154. #ifndef __DECLSPEC_SUPPORTED
  155.  
  156. extern int*    __imp__daylight_dll;
  157. extern long*    __imp__timezone_dll;
  158. extern char**    __imp__tzname;
  159.  
  160. #define _daylight    (*__imp__daylight_dll)
  161. #define _timezone    (*__imp__timezone_dll)
  162. #define _tzname        (__imp__tzname)
  163.  
  164. #else /* __DECLSPEC_SUPPORTED */
  165.  
  166. __MINGW_IMPORT int    _daylight_dll;
  167. __MINGW_IMPORT long    _timezone_dll;
  168. __MINGW_IMPORT char*    _tzname[2];
  169.  
  170. #define _daylight    _daylight_dll
  171. #define _timezone    _timezone_dll
  172.  
  173. #endif /* __DECLSPEC_SUPPORTED */
  174.  
  175. #endif /* not __MSVCRT__ */
  176.  
  177. #ifndef _NO_OLDNAMES
  178.  
  179. #ifdef __MSVCRT__
  180.  
  181. /* These go in the oldnames import library for MSVCRT. */
  182. __MINGW_IMPORT int    daylight;
  183. __MINGW_IMPORT long    timezone;
  184. __MINGW_IMPORT char     *tzname[2];
  185.  
  186. #ifndef _WTIME_DEFINED
  187.  
  188. /* wide function prototypes, also declared in wchar.h */
  189.  
  190. wchar_t *    _wasctime(const struct tm*);
  191. wchar_t *    _wctime(const time_t*);
  192. wchar_t*    _wstrdate(wchar_t*);
  193. wchar_t*    _wstrtime(wchar_t*);
  194.  
  195. #define _WTIME_DEFINED
  196. #endif /* _WTIME_DEFINED */ 
  197.  
  198.  
  199. #else /* not __MSVCRT__ */
  200.  
  201. /* CRTDLL is royally messed up when it comes to these macros.
  202.    TODO: import and alias these via oldnames import library instead 
  203.    of macros.  */
  204.  
  205. #define    daylight    _daylight
  206. /* NOTE: timezone not defined because it would conflict with sys/timeb.h */
  207. #define    tzname        _tzname
  208.  
  209. #endif /* not __MSVCRT__ */
  210.  
  211. #endif    /* Not _NO_OLDNAMES */
  212.  
  213. #ifdef    __cplusplus
  214. }
  215. #endif
  216.  
  217. #endif    /* Not RC_INVOKED */
  218.  
  219. #endif    /* Not _TIME_H_ */
  220.  
  221.