summaryrefslogtreecommitdiffstats
path: root/private/ntos/rtl/ttime.c
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/ntos/rtl/ttime.c
downloadNT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip
Diffstat (limited to 'private/ntos/rtl/ttime.c')
-rw-r--r--private/ntos/rtl/ttime.c325
1 files changed, 325 insertions, 0 deletions
diff --git a/private/ntos/rtl/ttime.c b/private/ntos/rtl/ttime.c
new file mode 100644
index 000000000..cd71ec3b1
--- /dev/null
+++ b/private/ntos/rtl/ttime.c
@@ -0,0 +1,325 @@
+/*++
+
+Copyright (c) 1989 Microsoft Corporation
+
+Module Name:
+
+ ttime.c
+
+Abstract:
+
+ Test program for the time conversion package
+
+Author:
+
+ Gary Kimura [GaryKi] 27-Aug-1989
+
+Revision History:
+
+--*/
+
+#include <stdio.h>
+
+#include "nt.h"
+#include "ntrtl.h"
+
+VOID
+PrintTimeFields(
+ IN PTIME_FIELDS TimeFields
+ );
+
+LARGE_INTEGER Zero;
+LARGE_INTEGER OneSecond;
+LARGE_INTEGER OneMinute;
+LARGE_INTEGER OneHour;
+LARGE_INTEGER OneDay;
+LARGE_INTEGER OneWeek;
+LARGE_INTEGER OneNormalYear;
+LARGE_INTEGER OneLeapYear;
+LARGE_INTEGER OneCentury;
+LARGE_INTEGER TwoCenturies;
+LARGE_INTEGER ThreeCenturies;
+LARGE_INTEGER FourCenturies;
+
+LARGE_INTEGER Sum;
+
+TIME_FIELDS TimeFields;
+LARGE_INTEGER Time;
+
+LARGE_INTEGER StartOf1970;
+LARGE_INTEGER StartOf1980;
+
+int
+main(
+ int argc,
+ char *argv[]
+ )
+{
+ ULONG i;
+
+ //
+ // We're starting the test
+ //
+
+ DbgPrint("Start Time Test\n");
+
+ //
+ // Start by initializing some constants and making sure they
+ // are correct
+ //
+
+ Zero.QuadPart = 0;
+ OneSecond.QuadPart = 10000000;
+ OneMinute.QuadPart = OneSecond.QuadPart * 60;
+ OneHour.QuadPart = OneMinute.QuadPart * 60;
+ OneDay.QuadPart = OneHour.QuadPart * 24;
+ OneWeek.QuadPart = OneDay.QuadPart * 7;
+ OneNormalYear.QuadPart = OneDay.QuadPart * 365;
+ OneLeapYear.QuadPart = OneDay.QuadPart * 366;
+ OneCentury.QuadPart = (OneNormalYear.QuadPart * 76) + (OneLeapYear.QuadPart * 24);
+ TwoCenturies.QuadPart = OneCentury.QuadPart * 2;
+ ThreeCenturies.QuadPart = OneCentury.QuadPart * 3;
+ FourCenturies.QuadPart = (OneCentury.QuadPart * 4) + OneDay.QuadPart;
+
+ Sum.QuadPart = Zero.QuadPart +
+ OneSecond.QuadPart +
+ OneMinute.QuadPart +
+ OneHour.QuadPart +
+ OneDay.QuadPart +
+ OneWeek.QuadPart +
+ OneNormalYear.QuadPart +
+ ThreeCenturies.QuadPart;
+
+
+ RtlTimeToTimeFields( (PLARGE_INTEGER)&Zero, &TimeFields );
+ DbgPrint("StartOf1601 = "); PrintTimeFields( &TimeFields ); DbgPrint("\n");
+ if (!RtlTimeFieldsToTime( &TimeFields, &Time )) {
+ DbgPrint("****ERROR converting TimeFields back to Zero\n");
+ }
+ if ((Time.LowPart != Zero.LowPart) || (Time.HighPart != Zero.HighPart)) {
+ DbgPrint("****ERROR Time != Zero\n");
+ }
+
+ RtlTimeToTimeFields( (PLARGE_INTEGER)&OneSecond, &TimeFields );
+ DbgPrint(" + 1 Second = "); PrintTimeFields( &TimeFields ); DbgPrint("\n");
+ if (!RtlTimeFieldsToTime( &TimeFields, &Time )) {
+ DbgPrint("****ERROR converting TimeFields back to OneSecond\n");
+ }
+ if ((Time.LowPart != OneSecond.LowPart) || (Time.HighPart != OneSecond.HighPart)) {
+ DbgPrint("****ERROR Time != OneSecond\n");
+ }
+
+ RtlTimeToTimeFields( (PLARGE_INTEGER)&OneMinute, &TimeFields );
+ DbgPrint(" + 1 Minute = "); PrintTimeFields( &TimeFields ); DbgPrint("\n");
+ if (!RtlTimeFieldsToTime( &TimeFields, &Time )) {
+ DbgPrint("****ERROR converting TimeFields back to OneMinute\n");
+ }
+ if ((Time.LowPart != OneMinute.LowPart) || (Time.HighPart != OneMinute.HighPart)) {
+ DbgPrint("****ERROR Time != OneMinute\n");
+ }
+
+ RtlTimeToTimeFields( (PLARGE_INTEGER)&OneHour, &TimeFields );
+ DbgPrint(" + 1 Hour = "); PrintTimeFields( &TimeFields ); DbgPrint("\n");
+ if (!RtlTimeFieldsToTime( &TimeFields, &Time )) {
+ DbgPrint("****ERROR converting TimeFields back to OneHour\n");
+ }
+ if ((Time.LowPart != OneHour.LowPart) || (Time.HighPart != OneHour.HighPart)) {
+ DbgPrint("****ERROR Time != OneHour\n");
+ }
+
+ RtlTimeToTimeFields( (PLARGE_INTEGER)&OneDay, &TimeFields );
+ DbgPrint(" + 1 Day = "); PrintTimeFields( &TimeFields ); DbgPrint("\n");
+ if (!RtlTimeFieldsToTime( &TimeFields, &Time )) {
+ DbgPrint("****ERROR converting TimeFields back to OneDay\n");
+ }
+ if ((Time.LowPart != OneDay.LowPart) || (Time.HighPart != OneDay.HighPart)) {
+ DbgPrint("****ERROR Time != OneDay\n");
+ }
+
+ RtlTimeToTimeFields( (PLARGE_INTEGER)&OneWeek, &TimeFields );
+ DbgPrint(" + 1 Week = "); PrintTimeFields( &TimeFields ); DbgPrint("\n");
+ if (!RtlTimeFieldsToTime( &TimeFields, &Time )) {
+ DbgPrint("****ERROR converting TimeFields back to OneWeek\n");
+ }
+ if ((Time.LowPart != OneWeek.LowPart) || (Time.HighPart != OneWeek.HighPart)) {
+ DbgPrint("****ERROR Time != OneWeek\n");
+ }
+
+ RtlTimeToTimeFields( (PLARGE_INTEGER)&OneNormalYear, &TimeFields );
+ DbgPrint(" + 1 NormalYear = "); PrintTimeFields( &TimeFields ); DbgPrint("\n");
+ if (!RtlTimeFieldsToTime( &TimeFields, &Time )) {
+ DbgPrint("****ERROR converting TimeFields back to OneNormalYear\n");
+ }
+ if ((Time.LowPart != OneNormalYear.LowPart) || (Time.HighPart != OneNormalYear.HighPart)) {
+ DbgPrint("****ERROR Time != OneNormalYear\n");
+ }
+
+ RtlTimeToTimeFields( (PLARGE_INTEGER)&OneLeapYear, &TimeFields );
+ DbgPrint(" + 1 LeapYear = "); PrintTimeFields( &TimeFields ); DbgPrint("\n");
+ if (!RtlTimeFieldsToTime( &TimeFields, &Time )) {
+ DbgPrint("****ERROR converting TimeFields back to OneLeapYear\n");
+ }
+ if ((Time.LowPart != OneLeapYear.LowPart) || (Time.HighPart != OneLeapYear.HighPart)) {
+ DbgPrint("****ERROR Time != OneLeapYear\n");
+ }
+
+ RtlTimeToTimeFields( (PLARGE_INTEGER)&OneCentury, &TimeFields );
+ DbgPrint(" + 1 Century = "); PrintTimeFields( &TimeFields ); DbgPrint("\n");
+ if (!RtlTimeFieldsToTime( &TimeFields, &Time )) {
+ DbgPrint("****ERROR converting TimeFields back to OneCentury\n");
+ }
+ if ((Time.LowPart != OneCentury.LowPart) || (Time.HighPart != OneCentury.HighPart)) {
+ DbgPrint("****ERROR Time != OneCentury\n");
+ }
+
+ RtlTimeToTimeFields( (PLARGE_INTEGER)&TwoCenturies, &TimeFields );
+ DbgPrint(" + 2 Centuries = "); PrintTimeFields( &TimeFields ); DbgPrint("\n");
+ if (!RtlTimeFieldsToTime( &TimeFields, &Time )) {
+ DbgPrint("****ERROR converting TimeFields back to TwoCenturies\n");
+ }
+ if ((Time.LowPart != TwoCenturies.LowPart) || (Time.HighPart != TwoCenturies.HighPart)) {
+ DbgPrint("****ERROR Time != TwoCenturies\n");
+ }
+
+ RtlTimeToTimeFields( (PLARGE_INTEGER)&ThreeCenturies, &TimeFields );
+ DbgPrint(" + 3 Centuries = "); PrintTimeFields( &TimeFields ); DbgPrint("\n");
+ if (!RtlTimeFieldsToTime( &TimeFields, &Time )) {
+ DbgPrint("****ERROR converting TimeFields back to ThreeCenturies\n");
+ }
+ if ((Time.LowPart != ThreeCenturies.LowPart) || (Time.HighPart != ThreeCenturies.HighPart)) {
+ DbgPrint("****ERROR Time != ThreeCenturies\n");
+ }
+
+ RtlTimeToTimeFields( (PLARGE_INTEGER)&FourCenturies, &TimeFields );
+ DbgPrint(" + 4 Centuries = "); PrintTimeFields( &TimeFields ); DbgPrint("\n");
+ if (!RtlTimeFieldsToTime( &TimeFields, &Time )) {
+ DbgPrint("****ERROR converting TimeFields back to FourCenturies\n");
+ }
+ if ((Time.LowPart != FourCenturies.LowPart) || (Time.HighPart != FourCenturies.HighPart)) {
+ DbgPrint("****ERROR Time != FourCenturies\n");
+ }
+
+ RtlTimeToTimeFields( (PLARGE_INTEGER)&Sum, &TimeFields );
+ DbgPrint(" + sum = "); PrintTimeFields( &TimeFields ); DbgPrint("\n");
+ if (!RtlTimeFieldsToTime( &TimeFields, &Time )) {
+ DbgPrint("****ERROR converting TimeFields back to Sum\n");
+ }
+ if ((Time.LowPart != Sum.LowPart) || (Time.HighPart != Sum.HighPart)) {
+ DbgPrint("****ERROR Time != Sum\n");
+ }
+
+ DbgPrint("\n");
+
+ //
+ // Setup and test the start 1970 time
+ //
+
+ RtlSecondsSince1970ToTime( 0, &StartOf1970 );
+ RtlTimeToTimeFields( &StartOf1970, &TimeFields );
+ DbgPrint(" Start of 1970 = "); PrintTimeFields( &TimeFields ); DbgPrint("\n");
+ if (!RtlTimeFieldsToTime( &TimeFields, &Time )) {
+ DbgPrint("****ERROR converting TimeFields back to start of 1970\n");
+ }
+ if ((Time.LowPart != StartOf1970.LowPart) || (Time.HighPart != StartOf1970.HighPart)) {
+ DbgPrint("****ERROR Time != StartOf1970\n");
+ }
+ if (!RtlTimeToSecondsSince1970( &StartOf1970, &i )) {
+ DbgPrint("****ERROR converting time to seconds since 1970\n");
+ }
+ if (i != 0) {
+ DbgPrint("****ERROR seconds since 1970 != 0\n");
+ }
+
+ //
+ // Setup and test the start 1980 time
+ //
+
+ RtlSecondsSince1980ToTime( 0, &StartOf1980 );
+ RtlTimeToTimeFields( &StartOf1980, &TimeFields );
+ DbgPrint(" Start of 1980 = "); PrintTimeFields( &TimeFields ); DbgPrint("\n");
+ if (!RtlTimeFieldsToTime( &TimeFields, &Time )) {
+ DbgPrint("****ERROR converting TimeFields back to start of 1980\n");
+ }
+ if ((Time.LowPart != StartOf1980.LowPart) || (Time.HighPart != StartOf1980.HighPart)) {
+ DbgPrint("****ERROR Time != StartOf1980\n");
+ }
+ if (!RtlTimeToSecondsSince1980( &StartOf1980, &i )) {
+ DbgPrint("****ERROR converting time to seconds since 1980\n");
+ }
+ if (i != 0) {
+ DbgPrint("****ERROR seconds since 1980 != 0\n");
+ }
+
+ //
+ // Lets try to print the Christmas when Santa arrives for 1901 to 2001
+ // every 10 years
+ //
+
+ TimeFields.Month = 12;
+ TimeFields.Day = 25;
+ TimeFields.Hour = 3;
+ TimeFields.Minute = 30;
+ TimeFields.Second = 15;
+ TimeFields.Milliseconds = 250;
+
+ for (i = 1901; i < 2002; i += 10) {
+
+ TimeFields.Year = i;
+
+ if (!RtlTimeFieldsToTime( &TimeFields, &Time )) {
+ DbgPrint("****ERROR converting TimeFields to Christmas %4d\n", TimeFields.Year);
+ }
+ RtlTimeToTimeFields( &Time, &TimeFields );
+ DbgPrint(" Christmas %4d = ", i); PrintTimeFields( &TimeFields ); DbgPrint("\n");
+
+ }
+
+ //
+ // Let's see how old I really am, when I turn 10, 20, 30, ...
+ //
+
+ TimeFields.Month = 12;
+ TimeFields.Day = 5;
+ TimeFields.Hour = 3;
+ TimeFields.Minute = 14;
+ TimeFields.Second = 0;
+ TimeFields.Milliseconds = 0;
+
+ for (i = 1956; i <= 1956+60; i += 10) {
+
+ TimeFields.Year = i;
+
+ if (!RtlTimeFieldsToTime( &TimeFields, &Time )) {
+ DbgPrint("****ERROR converting TimeFields to DOB %4d\n", TimeFields.Year);
+ }
+ RtlTimeToTimeFields( &Time, &TimeFields );
+ DbgPrint(" DOB + %4d = ", i-1956); PrintTimeFields( &TimeFields ); DbgPrint("\n");
+
+ }
+
+ DbgPrint("End Time Test\n");
+
+ return TRUE;
+}
+
+VOID
+PrintTimeFields (
+ IN PTIME_FIELDS TimeFields
+ )
+{
+ static PCHAR Months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
+
+ static PCHAR Days[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
+
+ DbgPrint(" %d", TimeFields->Year);
+ DbgPrint("-%s", Months[TimeFields->Month-1]);
+ DbgPrint("-%d", TimeFields->Day);
+
+ DbgPrint(" %2d", TimeFields->Hour);
+ DbgPrint(":%2d", TimeFields->Minute);
+ DbgPrint(":%2d", TimeFields->Second);
+ DbgPrint(".%3d", TimeFields->Milliseconds);
+
+ DbgPrint(" (%s)", Days[TimeFields->Weekday]);
+}