Files
microser/include/mmslite/stdtime_w32.h

354 lines
12 KiB
C
Raw Permalink Normal View History

2025-01-16 16:17:01 +08:00
/*****************************************************************************/
/* SISCO SOFTWARE MODULE HEADER **********************************************/
/*****************************************************************************/
/* (c) Copyright Systems Integration Specialists Company, Inc., */
/* 2005 All Rights Reserved */
/* */
/* MODULE NAME : stdtime_w32.h */
/* PRODUCT(S) : Standard Time Management Library */
/* */
/* MODULE DESCRIPTION: */
/* Header file for Standard Time Management Library Win32 Compatibility */
/* Layer. This header is compiled with STDTIMEW32_ENABLED on Windows to */
/* generate debugging code or to run emulation on Unix. To run on */
/* Windows, compile with STDTIMEW32_DISABLED. STDTIMEW32_ENABLED is */
/* required on Unix/Linux (that is, non-Windows) platforms. */
/* */
/* */
/* MODIFICATION LOG: */
/* Date Who Rev Comments */
/* -------- --- --- ----------------------------------------------------- */
/* 12/17/07 JRB 04 Del STDTIME_WIN_VARIANT, ..DBTIMESTAMP, ..UDATE */
/* structs (no longer used). */
/* 04/03/07 RLH 03 Make UDOT definition compatible with Linux 8.0 */
/* 06/07/06 RLH 02 Numerous features added, see stdtime.doc */
/* 01/18/06 RLH 01 Created */
/*****************************************************************************/
#ifndef _STDTIME_W32_H_29560654_4DD5_47A5_9B07_559DA09B36A3_
#define _STDTIME_W32_H_29560654_4DD5_47A5_9B07_559DA09B36A3_
#ifdef __cplusplus
extern "C" {
#endif
/*****************************************************************************/
/* ENABLED or DISABLED */
/*****************************************************************************/
#undef STDTIMEW32_DEBUGGING
#undef STDTIMEW32_UNIX
#if defined(STDTIMEW32_ENABLED) && defined(STDTIMEW32_DISABLED)
#error Both STDTIMEW32_ENABLED and STDTIMEW32_DISABLED defined
#undef STDTIMEW32_ENABLED
#endif
#if !defined(STDTIMEW32_ENABLED) && !defined(STDTIMEW32_DISABLED)
#if defined(STDTIMEW32_USE_CLOCKGETTIME) \
|| defined(STDTIMEW32_USE_GETTIMEOFDAY) \
|| defined(STDTIMEW32_USE_TIMEB) /**/
#define STDTIMEW32_ENABLED
#else
#define STDTIMEW32_DISABLED
#endif
#endif
#if defined(STDTIMEW32_DISABLED) && !defined(_WIN32)
#error StdTime Windows Compatibility Layer disabled on non-Windows platform
#endif
#if defined(STDTIMEW32_ENABLED) && defined(_WIN32)
#define STDTIMEW32_DEBUGGING
#endif
#if defined(STDTIMEW32_ENABLED) && !defined(_WIN32)
#define STDTIMEW32_UNIX
#endif
/*****************************************************************************/
/* STATIC (LOCAL) FUNCTION QUALIFIER */
/*****************************************************************************/
#ifndef STDTIMEW32_STATIC
#define STDTIMEW32_STATIC
#endif
/*****************************************************************************/
/* PORTABILITY API NAME DEFINITIONS */
/*****************************************************************************/
#if defined(STDTIMEW32_USE_CLOCKGETTIME)
#define STDTIME_API_GETSYSTEMTIMEASFILETIME StdTimeW32ClockGetTimeToFileTime
#elif defined(STDTIMEW32_USE_GETTIMEOFDAY)
#define STDTIME_API_GETSYSTEMTIMEASFILETIME StdTimeW32GetTimeOfDayToFileTime
#elif defined(STDTIMEW32_USE_TIMEB)
#define STDTIME_API_GETSYSTEMTIMEASFILETIME StdTimeW32TimeBToFileTime
#else
#ifdef STDTIMEW32_UNIX
#error No API defined for GetSystemTimeAsFileTime Unix interface
#endif
#endif /* STDTIMEW32_USE_CLOCKGETTIME */
#ifdef STDTIMEW32_ENABLED
#define STDTIME_API_FILETIMETOLOCALFILETIME StdTimeW32FileTimeToLocalFileTime
#define STDTIME_API_LOCALFILETIMETOFILETIME StdTimeW32LocalFileTimeToFileTime
#else
#define STDTIME_API_FILETIMETOLOCALFILETIME FileTimeToLocalFileTime
#define STDTIME_API_LOCALFILETIMETOFILETIME LocalFileTimeToFileTime
#endif /* STDTIMEW32_ENABLED */
#ifdef STDTIMEW32_ENABLED
#define STDTIME_API_FILETIMETOSYSTEMTIME StdTimeW32FileTimeToSystemTime
#define STDTIME_API_SYSTEMTIMETOFILETIME StdTimeW32SystemTimeToFileTime
#else
#define STDTIME_API_SYSTEMTIMETOFILETIME SystemTimeToFileTime
#define STDTIME_API_FILETIMETOSYSTEMTIME FileTimeToSystemTime
#endif /* STDTIMEW32_ENABLED */
/*****************************************************************************/
/* BASIC DEFINITIONS */
/*****************************************************************************/
#define STDTIME_WIN_EPOCH_YEAR 1601
#define STDTIME_UNIX_EPOCH_YEAR 1970
#undef STDTIME_WIN_VT_DATE_DEFINED
#ifdef _WIN32
/* if debugging non-Windows code on Windows, use compatibility typedefs */
typedef SHORT STDTIME_WIN_SHORT;
typedef USHORT STDTIME_WIN_USHORT;
typedef WORD STDTIME_WIN_WORD;
typedef DWORD STDTIME_WIN_DWORD;
typedef LONG STDTIME_WIN_LONG;
typedef ULONG STDTIME_WIN_ULONG;
typedef LONGLONG STDTIME_WIN_LONGLONG;
typedef ULONGLONG STDTIME_WIN_ULONGLONG;
typedef BOOL STDTIME_WIN_BOOL;
#define STDTIME_WIN_TRUE TRUE
#define STDTIME_WIN_FALSE FALSE
typedef SYSTEMTIME STDTIME_WIN_SYSTEMTIME;
typedef FILETIME STDTIME_WIN_FILETIME;
typedef LARGE_INTEGER STDTIME_WIN_LARGE_INTEGER;
typedef ULARGE_INTEGER STDTIME_WIN_ULARGE_INTEGER;
#else /* not _WIN32 */
typedef int16_t STDTIME_WIN_SHORT;
typedef uint16_t STDTIME_WIN_USHORT;
typedef uint16_t STDTIME_WIN_WORD;
typedef uint32_t STDTIME_WIN_DWORD;
typedef int32_t STDTIME_WIN_LONG;
typedef uint32_t STDTIME_WIN_ULONG;
typedef QUADLIB_I64 STDTIME_WIN_LONGLONG;
typedef QUADLIB_U64 STDTIME_WIN_ULONGLONG;
typedef int32_t STDTIME_WIN_BOOL;
#define STDTIME_WIN_TRUE 1
#define STDTIME_WIN_FALSE 0
#endif /* _WIN32 */
/*****************************************************************************/
/* SYSTEMTIME structure - compatibility definition */
/*****************************************************************************/
#ifdef STDTIMEW32_UNIX
typedef struct
{
STDTIME_WIN_WORD wYear;
STDTIME_WIN_WORD wMonth;
STDTIME_WIN_WORD wDayOfWeek;
STDTIME_WIN_WORD wDay;
STDTIME_WIN_WORD wHour;
STDTIME_WIN_WORD wMinute;
STDTIME_WIN_WORD wSecond;
STDTIME_WIN_WORD wMilliseconds;
} STDTIME_WIN_SYSTEMTIME;
#endif /* STDTIMEW32_UNIX */
/*****************************************************************************/
/* VT_DATE compatibility definitions */
/*****************************************************************************/
#ifndef STDTIME_WIN_VT_DATE_DEFINED
typedef uint16_t STDTIME_WIN_VARTYPE;
typedef double STDTIME_WIN_DATE;
enum STDTIME_WIN_VARENUM
{
STDTIME_WIN_VT_EMPTY = 0,
STDTIME_WIN_VT_DATE = 7,
STDTIME_WIN_VT_BYREF = 0x4000
};
#endif /* STDTIME_WIN_VT_DATE_DEFINED */
/*****************************************************************************/
/* FILETIME structure - compatibility definition */
/*****************************************************************************/
#ifdef STDTIMEW32_UNIX
typedef struct
{
STDTIME_WIN_DWORD dwLowDateTime;
STDTIME_WIN_DWORD dwHighDateTime;
} STDTIME_WIN_FILETIME;
#endif /* STDTIMEW32_UNIX */
/*****************************************************************************/
/* LARGE_INTEGER structure - compatibility definition */
/*****************************************************************************/
#ifdef STDTIMEW32_UNIX
typedef union _STDTIME_WIN_LARGE_INTEGER
{
/* to maximize compatibility, the anonymous struct is omitted */
/* references to LARGE_INTEGER fields will require 'u' qualifier */
/* use of the anonymous struct is a non-portable Microsoft extension. */
/* the order of LowPart and HighPart should agree with endian */
/* ordering on the host platform */
/* if compiled under I64 compatibility, QuadPart is a QuadLib structure */
/* QUADLIB_I64 and QUADLIB_U64 are the same type, but have different */
/* names to document their intended usage */
struct
{
STDTIME_WIN_DWORD LowPart;
STDTIME_WIN_LONG HighPart;
} u;
QUADLIB_I64 QuadPart;
} STDTIME_WIN_LARGE_INTEGER;
#endif /* STDTIMEW32_UNIX */
/*****************************************************************************/
/* ULARGE_INTEGER structure - compatibility definition */
/*****************************************************************************/
#ifdef STDTIMEW32_UNIX
typedef union _STDTIME_WIN_ULARGE_INTEGER
{
/* to maximize compatibility, the anonymous struct is omitted */
/* references to ULARGE_INTEGER fields will require 'u' qualifier */
/* use of the anonymous struct is a non-portable Microsoft extension. */
/* the order of LowPart and HighPart should agree with endian */
/* ordering on the host platform */
/* if compiled under I64 compatibility, QuadPart is a QuadLib structure */
/* QUADLIB_I64 and QUADLIB_U64 are the same type, but have different */
/* names to document their intended usage */
struct
{
STDTIME_WIN_DWORD LowPart;
STDTIME_WIN_DWORD HighPart;
} u;
QUADLIB_U64 QuadPart;
} STDTIME_WIN_ULARGE_INTEGER;
#endif /* STDTIMEW32_UNIX */
/*****************************************************************************/
/* compatibility-layer API functions */
/*****************************************************************************/
#ifndef STDTIME_API_GETSYSTEMTIMEASFILETIME
#define STDTIME_API_GETSYSTEMTIMEASFILETIME GetSystemTimeAsFileTime
#else
STDTIMEW32_STATIC void STDTIME_API_GETSYSTEMTIMEASFILETIME (
STDTIME_WIN_FILETIME * /*O*/ pFileTime);
#endif
#ifdef STDTIMEW32_ENABLED
STDTIMEW32_STATIC STDTIME_WIN_BOOL StdTimeW32SystemTimeToFileTime (
const STDTIME_WIN_SYSTEMTIME * /*I*/ pSystemTime,
STDTIME_WIN_FILETIME * /*O*/ pFileTime);
STDTIMEW32_STATIC STDTIME_WIN_BOOL StdTimeW32FileTimeToSystemTime (
const STDTIME_WIN_FILETIME * /*I*/ pFileTime,
STDTIME_WIN_SYSTEMTIME * /*O*/ pSystemTime);
STDTIMEW32_STATIC STDTIME_WIN_BOOL StdTimeW32FileTimeToLocalFileTime (
const STDTIME_WIN_FILETIME * /*I*/ pGmtFileTime,
STDTIME_WIN_FILETIME * /*O*/ pLocFileTime);
STDTIMEW32_STATIC STDTIME_WIN_BOOL StdTimeW32LocalFileTimeToFileTime (
const STDTIME_WIN_FILETIME * /*I*/ pLocFileTime,
STDTIME_WIN_FILETIME * /*O*/ pGmtFileTime);
#endif /* STDTIMEW32_ENABLED */
/*****************************************************************************/
/* OBTAIN DAY OF WEEK AND DAY OF WEEK */
/*****************************************************************************/
STDTIME_RC StdTimeW32GetDayofWeekAndYear (
int32_t /*I*/ nYear,
int32_t /*I*/ nMon,
int32_t /*I*/ nDayofMon,
int32_t * /*O*/ pDayofWeek,
int32_t * /*O*/ pDayofYear);
/*****************************************************************************/
/* END */
/*****************************************************************************/
#ifdef __cplusplus
}
#endif
#endif /* _STDTIME_W32_H_29560654_4DD5_47A5_9B07_559DA09B36A3_ */