mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
217 lines
4.5 KiB
217 lines
4.5 KiB
/*++
|
|
|
|
Copyright (c) 1991-1992 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
TIMEF.c
|
|
|
|
Abstract:
|
|
|
|
time formatting routines adapted from NETLIB
|
|
|
|
Author:
|
|
|
|
Dan Hinsley (danhi) 06-Jun-1991
|
|
|
|
Environment:
|
|
|
|
User Mode - Win32
|
|
|
|
Revision History:
|
|
|
|
24-Apr-1991 danhi
|
|
32 bit NT version
|
|
|
|
06-Jun-1991 Danhi
|
|
Sweep to conform to NT coding style
|
|
|
|
01-Oct-1992 JohnRo
|
|
RAID 3556: Added NetpSystemTimeToGmtTime() for DosPrint APIs.
|
|
|
|
--*/
|
|
|
|
//
|
|
// INCLUDES
|
|
//
|
|
|
|
#include <windows.h> // IN, LPTSTR, etc.
|
|
|
|
#include <netcons.h>
|
|
#include <neterr.h>
|
|
#include "netlib0.h"
|
|
#include <lui.h>
|
|
#include <apperr2.h>
|
|
#include <stdio.h>
|
|
#include <tchar.h>
|
|
#include "netascii.h"
|
|
|
|
#define SECS_PER_DAY 86400
|
|
#define SECS_PER_HOUR 3600
|
|
#define SECS_PER_MINUTE 60
|
|
|
|
#define NO_SUFFIX 1
|
|
#define AM_SUFFIX 2
|
|
#define PM_SUFFIX 3
|
|
|
|
TCHAR szTimeSep[3] ; // enough for 1 SBCS/MBCS.
|
|
USHORT fsTimeFmt ;
|
|
|
|
/* local routine */
|
|
VOID GetTimeInfo(VOID)
|
|
{
|
|
// get the defautl separator from the system
|
|
GetProfileString(TEXT("intl"),
|
|
TEXT("sTime"),
|
|
TEXT(":"),
|
|
szTimeSep,
|
|
DIMENSION(szTimeSep)) ;
|
|
}
|
|
/*
|
|
*LUI_FormatDuration(seconds,buffer,buffer_len)
|
|
*
|
|
*Purpose:
|
|
* Converts a time stored in seconds to a character string.
|
|
*
|
|
*History
|
|
* 8/23/89 - chuckc, stolen from NETLIB
|
|
*/
|
|
|
|
USHORT
|
|
LUI_FormatDuration(
|
|
LONG * time,
|
|
TCHAR * buf,
|
|
USHORT buflen
|
|
)
|
|
{
|
|
|
|
ULONG duration;
|
|
ULONG d1, d2, d3;
|
|
TCHAR szDayAbbrev[8], szHourAbbrev[8], szMinuteAbbrev[8] ;
|
|
TCHAR tmpbuf[LUI_FORMAT_DURATION_LEN] ;
|
|
|
|
/*
|
|
* check for input bufsize
|
|
*/
|
|
if (buflen < LUI_FORMAT_DURATION_LEN)
|
|
return (NERR_BufTooSmall) ; /* buffer too small */
|
|
|
|
/*
|
|
* setup country info & setup day/hour/minute strings
|
|
*/
|
|
GetTimeInfo() ;
|
|
if (LUI_GetMsg(szHourAbbrev, DIMENSION(szHourAbbrev),
|
|
APE2_TIME_HOURS_ABBREV))
|
|
_tcscpy(szHourAbbrev, TEXT("H")) ; /* default if error */
|
|
if (LUI_GetMsg(szMinuteAbbrev, DIMENSION(szMinuteAbbrev),
|
|
APE2_TIME_MINUTES_ABBREV))
|
|
_tcscpy(szMinuteAbbrev, TEXT("M")) ; /* default if error */
|
|
if (LUI_GetMsg(szDayAbbrev, DIMENSION(szDayAbbrev),
|
|
APE2_TIME_DAYS_ABBREV))
|
|
_tcscpy(szDayAbbrev, TEXT("D")) ; /* default if error */
|
|
|
|
/*
|
|
* format as 00:00:00 or 5D 4H 2M as appropriate
|
|
*/
|
|
duration = *time;
|
|
if(duration < SECS_PER_DAY)
|
|
{
|
|
d1 = duration / SECS_PER_HOUR;
|
|
duration %= SECS_PER_HOUR;
|
|
d2 = duration / SECS_PER_MINUTE;
|
|
duration %= SECS_PER_MINUTE;
|
|
d3 = duration;
|
|
|
|
swprintf(tmpbuf, TEXT("%2.2lu%ws%2.2lu%ws%2.2lu\0"),
|
|
d1, szTimeSep, d2, szTimeSep, d3 ) ;
|
|
}
|
|
else
|
|
{
|
|
d1 = duration / SECS_PER_DAY;
|
|
duration %= SECS_PER_DAY;
|
|
d2 = duration / SECS_PER_HOUR;
|
|
duration %= SECS_PER_HOUR;
|
|
d3 = duration / SECS_PER_MINUTE;
|
|
swprintf(tmpbuf, TEXT("%2.2lu%ws %2.2lu%ws %2.2lu%ws\0"),
|
|
d1, szDayAbbrev,
|
|
d2, szHourAbbrev,
|
|
d3, szMinuteAbbrev);
|
|
};
|
|
|
|
_tcscpy(buf,tmpbuf) ;
|
|
return(0);
|
|
}
|
|
|
|
|
|
/*
|
|
*LUI_FormatTimeofDay(seconds,buffer,buffer_len)
|
|
*
|
|
*Purpose:
|
|
* Converts a time stored in seconds to a character string.
|
|
*
|
|
*History
|
|
* 8/23/89 - chuckc, stolen from NETLIB
|
|
* 4/18/91 - danhi 32 bit NT version
|
|
*/
|
|
USHORT
|
|
LUI_FormatTimeofDay(
|
|
PLONG time,
|
|
PTCHAR buf,
|
|
USHORT buflen
|
|
)
|
|
{
|
|
int hrs, min ;
|
|
TCHAR szTimeAM[8], szTimePM[8] ;
|
|
TCHAR tmpbuf[LUI_FORMAT_TIME_LEN] ;
|
|
LONG seconds ;
|
|
|
|
/*
|
|
* initial checks
|
|
*/
|
|
if(buflen < LUI_FORMAT_TIME_LEN)
|
|
return (NERR_BufTooSmall) ;
|
|
seconds = *time ;
|
|
if (seconds < 0 || seconds >= SECS_PER_DAY)
|
|
return(ERROR_INVALID_PARAMETER) ;
|
|
|
|
/*
|
|
* get country info & setup strings
|
|
*/
|
|
GetTimeInfo() ;
|
|
if (LUI_GetMsg(szTimeAM, DIMENSION(szTimeAM),
|
|
APE2_GEN_TIME_AM1))
|
|
_tcscpy(szTimeAM, TEXT("AM")) ; /* default if error */
|
|
if (LUI_GetMsg(szTimePM, DIMENSION(szTimePM),
|
|
APE2_GEN_TIME_PM1))
|
|
_tcscpy(szTimePM,TEXT("PM")) ; /* default if error */
|
|
|
|
min = (int) ((seconds /60)%60);
|
|
hrs = (int) (seconds /3600);
|
|
|
|
/*
|
|
* Do 24 hour or 12 hour format as appropriate
|
|
*/
|
|
if(fsTimeFmt == 0x001)
|
|
{
|
|
swprintf(tmpbuf, TEXT("%2.2u%ws%2.2u"), hrs, szTimeSep, min) ;
|
|
}
|
|
else
|
|
{
|
|
if(hrs >= 12)
|
|
{
|
|
if (hrs > 12)
|
|
hrs -= 12 ;
|
|
swprintf(tmpbuf, TEXT("%2u%ws%2.2u%ws\0"),
|
|
hrs, szTimeSep, min, szTimePM) ;
|
|
}
|
|
else
|
|
{
|
|
if (hrs == 0)
|
|
hrs = 12 ;
|
|
swprintf(tmpbuf, TEXT("%2u%ws%2.2u%ws\0"),
|
|
hrs, szTimeSep, min, szTimeAM);
|
|
};
|
|
};
|
|
_tcscpy(buf,tmpbuf) ;
|
|
return(0);
|
|
}
|