#include "windows.h" #include #include "date.h" extern CHAR chSepDate; extern CHAR chSepTime; extern CHAR sz1159[]; extern CHAR sz2359[]; extern INT iDate; extern INT iYearOffset; extern BOOL f24Time; extern BOOL fLZero; extern HANDLE hinstTimeDate; extern INT cchTimeMax; extern INT cchLongDateMax; extern CHAR *rgszDayAbbrevs[]; void LockStrings(id) WORD id; { HANDLE h; if ((h = FindResource(hinstTimeDate, MAKEINTRESOURCE(IDS_DATESTRINGS >> 4), RT_STRING)) && (h = LoadResource(hinstTimeDate, h))) { GlobalLock(h); } } void CalcCchDateMax(idFirst, idLast) WORD idFirst; WORD idLast; { CHAR rgch[30]; register INT cch, cchT; cch = 0; while (idFirst <= idLast) { cchT = LoadString(hinstTimeDate, idFirst++, rgch, 30); if (cchT > cch) cch = cchT; } cchLongDateMax += cch; } BOOL FAR APIENTRY InitLongTimeDate(UINT format) { INT cchT; INT i; CHAR rgch[30]; LANGID PrimaryLangID = PRIMARYLANGID(GetSystemDefaultLangID()); /* 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); #ifdef LEPPARD for (i = IDS_SEPSTRINGS; i <= IDS_SEPSTRINGS+4; i++) { cchLongDateMax += LoadString(hinstTimeDate, i, rgch, 30); } #else cchLongDateMax += 5; /* room for spaces and commas */ #endif CalcCchDateMax(IDS_DAYSOFWEEK, IDS_DAYSOFWEEK+6); // // See if it's Japanese or Korean. // if ((PrimaryLangID == LANG_JAPANESE) || (PrimaryLangID == LANG_KOREAN)) { cchLongDateMax += LoadString(hinstTimeDate, IDS_SEPSTRINGS+5, rgch, 30); cchLongDateMax += LoadString(hinstTimeDate, IDS_SEPSTRINGS+6, rgch, 30); } /* Calc max size of time string */ cchT = 0; if (!f24Time) { cchT = lstrlen(sz2359); cchTimeMax = lstrlen(sz1159); if (cchT > cchTimeMax) cchTimeMax = cchT; } cchTimeMax += 6; return TRUE; }