Leaked source code of windows server 2003
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.
|
|
/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
resources.c
Abstract:
This module implements all access to the resources.
Author:
Wesley Witt (wesw) 21-Oct-1998
Revision History:
--*/
#include "cmdcons.h"
#pragma hdrstop
LPCWSTR _DateTimeFormat;
VOID vRcMessageOut( IN ULONG MessageId, IN va_list *arglist ) { WCHAR *p; NTSTATUS Status;
//
// Load the message
//
p = SpRetreiveMessageText(ImageBase,MessageId,NULL,0); if(!p) { return; }
Status = SpRtlFormatMessage( p, 0, FALSE, FALSE, FALSE, arglist, _CmdConsBlock->TemporaryBuffer, _CmdConsBlock->TemporaryBufferSize, NULL );
SpMemFree(p);
if(NT_SUCCESS(Status)) { RcTextOut(_CmdConsBlock->TemporaryBuffer); } }
VOID RcMessageOut( IN ULONG MessageId, ... ) { va_list arglist;
va_start(arglist,MessageId); vRcMessageOut(MessageId,&arglist); va_end(arglist); }
ULONG RcFormatDateTime( IN PLARGE_INTEGER Time, OUT LPWSTR Output ) { TIME_FIELDS TimeFields; WCHAR *p,*AmPmSpec; LPCWSTR q; int i;
//
// Load the system date and time format string if not loaded already.
//
if(!_DateTimeFormat) { _DateTimeFormat = SpRetreiveMessageText(ImageBase,MSG_DATE_TIME_FORMAT,NULL,0); if(!_DateTimeFormat) { _DateTimeFormat = L"m/d/y h:na*"; } }
//
// Translate the last write time to time fields.
//
RtlTimeToTimeFields(Time,&TimeFields);
//
// Format the date and time.
//
p = Output; q = _DateTimeFormat; AmPmSpec = NULL;
while(*q != L'*') {
switch(*q) {
case L'm': i = TimeFields.Month; break;
case L'd': i = TimeFields.Day; break;
case L'y': i = TimeFields.Year; break;
case L'h': i = TimeFields.Hour % 12; if(i == 0) { i = 12; } break;
case L'H': i = TimeFields.Hour; break;
case L'n': i = TimeFields.Minute; break;
case L'a': i = -1; AmPmSpec = p++; break;
default: i = -1; *p++ = *q; break; }
if(i != -1) {
i = i % 100;
*p++ = (i / 10) + L'0'; *p++ = (i % 10) + L'0'; }
q++; }
if(AmPmSpec) { q++; // q points at am specifier
if(TimeFields.Hour >= 12) { q++; // q points at pm specifier
}
*AmPmSpec = *q; }
*p = 0;
return (ULONG)(p - Output); }
|