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.
108 lines
3.0 KiB
108 lines
3.0 KiB
#include "windows.h"
|
|
#include "date.h"
|
|
#include "uniconv.h"
|
|
|
|
|
|
TIME Time;
|
|
DATE Date;
|
|
WORD iYearOffset;
|
|
HANDLE hinstTimeDate;
|
|
WORD cchTimeMax; /* Maximum size of time string */
|
|
WORD cchLongDateMax; /* Maximum size of long date string */
|
|
|
|
|
|
VOID CalcCchDateMax(idFirst, idLast)
|
|
WORD idFirst;
|
|
WORD idLast;
|
|
{
|
|
TCHAR rgch[CCHMONTH];
|
|
register INT cch, cchT;
|
|
|
|
cch = 0;
|
|
while (idFirst <= idLast)
|
|
{
|
|
cchT = LoadString(hinstTimeDate, idFirst++, rgch, CCHMONTH);
|
|
if (cchT > cch)
|
|
cch = cchT;
|
|
}
|
|
cchLongDateMax += cch;
|
|
}
|
|
|
|
|
|
VOID LockStrings(id)
|
|
WORD id;
|
|
{
|
|
HANDLE h;
|
|
|
|
if ((h = FindResource (hinstTimeDate, (LPTSTR) MAKEINTRESOURCE(IDS_DATESTRINGS >> 4), RT_STRING))
|
|
&& (h = LoadResource(hinstTimeDate, h)))
|
|
{
|
|
GlobalLock(h);
|
|
}
|
|
}
|
|
|
|
|
|
VOID FAR APIENTRY InitTimeDate (HANDLE hInstance)
|
|
{
|
|
LCID lcid;
|
|
int i, id;
|
|
TCHAR szBuf[3];
|
|
|
|
extern TCHAR szDec[5];
|
|
|
|
hinstTimeDate = hInstance;
|
|
|
|
/* get current locale */
|
|
lcid = GetUserDefaultLCID ();
|
|
|
|
/* Get time related info */
|
|
GetLocaleInfoW (lcid, LOCALE_ITIME, (LPWSTR) szBuf, CharSizeOf(szBuf));
|
|
Time.iTime = MyAtoi (szBuf);
|
|
|
|
GetLocaleInfoW (lcid, LOCALE_ITLZERO, (LPWSTR) szBuf, CharSizeOf(szBuf));
|
|
Time.iLZero = MyAtoi (szBuf);
|
|
|
|
GetLocaleInfoW (lcid, LOCALE_S1159, (LPWSTR) Time.sz1159, CharSizeOf(Time.sz1159));
|
|
GetLocaleInfoW (lcid, LOCALE_S2359, (LPWSTR) Time.sz2359, CharSizeOf(Time.sz2359));
|
|
GetLocaleInfoW (lcid, LOCALE_STIME, (LPWSTR) szBuf, CharSizeOf(szBuf));
|
|
Time.chSep = *szBuf;
|
|
|
|
/* Calc max size of time string */
|
|
if (!Time.iTime)
|
|
cchTimeMax = max (lstrlen(Time.sz2359), lstrlen(Time.sz1159));
|
|
cchTimeMax += 6;
|
|
|
|
/* Get date related info */
|
|
iYearOffset = GetProfileInt(TEXT("intl"), TEXT("iYearOffset"), 0);
|
|
|
|
GetLocaleInfoW (lcid, LOCALE_IDATE, (LPWSTR) szBuf, CharSizeOf(szBuf));
|
|
Date.iDate = MyAtoi (szBuf);
|
|
|
|
GetLocaleInfoW (lcid, LOCALE_ILZERO, (LPWSTR) szBuf, CharSizeOf(szBuf));
|
|
Date.iLZero = MyAtoi (szBuf);
|
|
|
|
/* Get short date format */
|
|
GetLocaleInfoW (lcid, LOCALE_SSHORTDATE, (LPWSTR) Date.szShortFmt, MAX_SHORTFMT);
|
|
|
|
/* Get long date format */
|
|
GetLocaleInfoW (lcid, LOCALE_SLONGDATE, (LPWSTR) Date.szLongFmt, CCHDATEDISP);
|
|
|
|
/* Get date/time strings into memory & lock down for all time */
|
|
LockStrings(((WORD)IDS_DATESTRINGS >> 4) + 0);
|
|
LockStrings(((WORD)IDS_DATESTRINGS >> 4) + 1);
|
|
|
|
/* Now calculate worst case size of long date string */
|
|
/* this is sum of separator strings, plus max of months, plus max of
|
|
weekdays, plus 2 digits, plus 4 digits, plus zero terminator */
|
|
cchLongDateMax = 2 + 4;
|
|
|
|
CalcCchDateMax(IDS_MONTHS, IDS_MONTHS + 11);
|
|
|
|
CalcCchDateMax(IDS_DAYSOFWEEK, IDS_DAYSOFWEEK + 6);
|
|
|
|
cchLongDateMax += 5; /* room for spaces and commas */
|
|
|
|
/* Get the intl decimal character for use in Page Setup Box. */
|
|
GetLocaleInfoW(lcid, LOCALE_SDECIMAL, szDec, CharSizeOf(szDec));
|
|
}
|
|
|