home *** CD-ROM | disk | FTP | other *** search
- {
- ════════════════════════════════════════════════════════════════════════════
-
- Visionix Date Functions Unit (VDATES)
- Version 0.12
- Copyright 1991,92,93 Visionix
- ALL RIGHTS RESERVED
-
- ────────────────────────────────────────────────────────────────────────────
-
- Revision history in reverse chronological order:
-
- Initials Date Comment
- ──────── ──────── ────────────────────────────────────────────────────────
-
- jrt 12/06/93 Added SwatchExpired
-
- mep 11/25/93 Added Unix date functions.
-
- mep 11/19/93 Total rewriting of unit. Much easier to use now.
-
- lpg 03/21/93 Changed: TDateTime -> TDTime, DateTime -> TDateTime.
-
- lpg 03/13/93 Added Source Documentation
-
- mep 02/11/93 Cleaned up code for beta release
-
- jrt 02/08/93 Sync with beta 0.12 release
-
- lpg 01/13/93 Added: ValidDateTime
-
- mep 12/18/92 Added: TimeToStrHM and DateToStrDay for VCopy use.
-
- jrt 12/07/92 Sync with beta 0.11 release
-
- lpg 11/24/92 Modified & corrected DT functions,
-
- jrt 11/21/92 Sync with beta 0.08
-
- lpg 10/23/92 Made more Functions & Tested
-
- lpg 10/19/92 Created
-
- ════════════════════════════════════════════════════════════════════════════
- }
-
- (*-
-
- [TEXT]
-
- <Overview>
-
- VDATES is the collection of various date and time functions. Some features
- include:
-
- ■ Day of week, Leap Year, Days in month, and Daylight Savings.
-
- ■ Type validations.
-
- ■ DateTime (from DOS unit) is now called TDateTime (for Windows compat.).
-
- ■ TDateTime inc, dec, add, sub, and absolution difference.
-
- ■ Julian date <--> DateTime conversions (for your Date-math functions).
-
- ■ Packed DateTime extractions and conversions.
-
- ■ Stop Watch (TSwatch) for the time-of-day in seconds (with 100th second
- accuracy). TSwatch also has inc, dec, add, sub, and distance functions.
-
- ■ System Clock functions: clock ticks since midnight, setting system
- date and time, setting system alarm (these work with BCD parameters).
-
- ■ and much more...
-
- <Interface>
-
- -*)
-
- Unit VDatesu;
-
- Interface
-
- {──────────────────────────────────────────────────────────────────────────}
-
- Uses
-
- VTypesu,
- VGenu,
- VStringu,
- DOS;
-
- {──────────────────────────────────────────────────────────────────────────}
-
- Const
-
- {-----------------------------------}
- { Constants for Date/Time functions }
- {-----------------------------------}
-
- cdt100sInDay = 8640000;
-
- cdtSecsInDay = 86400; { Number of seconds per day }
-
- cdtSecsInHour = 3600;
-
- cdtDaysInMonth : Array[1..12] of BYTE =
- (31,28,31,30,31,30,31,31,30,31,30,31);
-
- cdtYearBase : WORD = 1980; { The assumed beginning year for functions }
-
- cdtDayStr : Array[0..6] of String[15] =
- ( 'Sunday', 'Monday', 'Tuesday', 'Wednesday',
- 'Thursday', 'Friday', 'Saturday' );
-
- cdtMonthStr : Array[1..12] of String[12] =
- ( 'January', 'February', 'March', 'April',
- 'May', 'June', 'July', 'August',
- 'September', 'October', 'November', 'December' );
-
- cdtDateTimeMask : STRING = 'WWW $MMM D+, $Y+ HH:II:SS';
-
- cdtSwatchMask : STRING = 'HH:II:SS.1+';
-
- cdtUnixBase = 2440588; { Julian days for 1/1/1970 }
-
-
-
-
- Type
-
- {---------------------------------------------------------------}
- { Since TPW redefines DateTime (DOS.TPU) to TDateTime, use this }
- { instead of DateTime (for compatibility). }
- {---------------------------------------------------------------}
-
- {$IFNDEF TDateTime}
-
- TDateTime = DateTime;
-
- {$ENDIF}
-
- TDateTimeEx = RECORD { DateTime type with extensions }
-
- Year : WORD;
- Month : WORD;
- Day : WORD;
- DOW : WORD;
- Hour : WORD;
- Min : WORD;
- Sec : WORD;
- Sec100 : WORD;
-
- END;
-
- TPackedDT = LONGINT; { Packed TDateTime (4-bytes as used in DOS) }
-
- TSwatch = REAL; { StopWatch in seconds (decimal is 100th seconds) }
-
- TJulian = LONGINT; { Linear date system (for calendar math) }
-
- TUnixDT = LONGINT; { Seconds since Jan 1, 1970 12:00:00 AM }
-
- {════════════════════════════════════════════════════════════════════════════}
-
-
- {-----------------}
- { Basic Functions }
- {-----------------}
-
- Function DayOfWeek( DT : TDateTime ) : WORD;
-
- Function IsLeapYear( Year : WORD ) : BOOLEAN;
-
- Function LeapYearDays( Year : WORD ) : INTEGER;
-
- Function DaysInMonth( Month : WORD;
- Year : WORD ) : INTEGER;
-
- Function IsDayLightSavings( DT : TDateTime ) : BOOLEAN;
-
- Function IsTimePM( Swatch : TSwatch ) : BOOLEAN;
-
- Function CompleteYear( Year : WORD ) : WORD;
-
- Function VDatesMaskStr( DTEx : TDateTimeEx;
- MaskStr : STRING ) : STRING;
-
- {---------------------}
- { Validation of Types }
- {---------------------}
-
- Function ValidDate( Year : WORD;
- Month : WORD;
- Day : WORD ) : BOOLEAN;
-
- Function ValidTime( Hour : WORD;
- Min : WORD;
- Sec : WORD ) : BOOLEAN;
-
- Function ValidDateTime( DT : TDateTime ) : BOOLEAN;
-
- Function ValidPacked( PackedDT : TPackedDT ) : BOOLEAN;
-
- Function ValidSwatch( Swatch : TSwatch ) : BOOLEAN;
-
-
- {---------------------}
- { TDateTime Functions }
- {---------------------}
-
- Procedure CurrDateTime( Var DT : TDateTime );
-
- Function DateTimeStr( DT : TDateTime ) : STRING;
-
- Function DateTimeMaskStr( DT : TDateTime;
- Mask : STRING ) : STRING;
-
- Procedure IncDateTime( Var DT : TDateTime );
-
- Procedure DecDateTime( Var DT : TDateTime );
-
- Procedure AddDateTime( DTAdd : TDateTime;
- Var DT : TDateTime );
-
- Procedure SubDateTime( DTSub : TDateTime;
- Var DT : TDateTime );
-
- Procedure DateTimeDiff( DT1 : TDateTime;
- DT2 : TDateTime;
- Var DTDiff : TDateTime );
-
- Procedure ExToDateTime( DTEx : TDateTimeEx;
- Var DT : TDateTime );
-
- Procedure DateTimeToEx( DT : TDateTime;
- Var DTEx : TDateTimeEx );
-
- Function DTtoJulian( DT : TDateTime ) : TJulian;
-
- Procedure JulianToDT( J : TJulian;
- Var DT : TDateTime );
-
-
- Function DTtoSwatch( DT : TDateTime ) : TSwatch;
-
- Procedure SwatchToDT( Swatch : TSwatch;
- Var DT : TDateTime );
-
- Function DTtoUnix( DT : TDateTime ) : TUnixDT;
-
- Procedure UnixToDT( UnixDT : TUnixDT;
- Var DT : TDateTime );
-
- {---------------------------}
- { Packed DateTime Functions }
- {---------------------------}
-
- Function CurrPackedDT : TPackedDT;
-
- Function GetPackedDate( PackedDT : TPackedDT ) : WORD;
-
- Function GetPackedTime( PackedDT : TPackedDT ) : WORD;
-
-
- {------------------}
- { Swatch Functions }
- {------------------}
-
- Function CurrSwatch : TSwatch;
-
- Function HMS1ToSwatch( Hour : WORD;
- Min : WORD;
- Sec : WORD;
- Sec100 : WORD ) : TSwatch;
-
- Procedure SwatchToHMS1( Swatch : TSwatch;
- Var Hour : WORD;
- Var Min : WORD;
- Var Sec : WORD;
- Var Sec100 : WORD );
-
- Function SwatchStr( Swatch : TSwatch ) : STRING;
-
- Function SwatchMaskStr( Swatch : TSwatch;
- Mask : STRING ) : STRING;
-
- Function AddSwatch( Swatch : TSwatch;
- Hours : WORD;
- Mins : WORD;
- Secs : WORD;
- Sec100s : WORD ) : TSwatch;
-
- Function SubSwatch( Swatch : TSwatch;
- Hours : WORD;
- Mins : WORD;
- Secs : WORD;
- Sec100s : WORD ) : TSwatch;
-
- Procedure SwatchDiff( Swatch1 : TSwatch;
- Swatch2 : TSwatch;
- Var Hours : WORD;
- Var Mins : WORD;
- Var Secs : WORD;
- Var Sec100s : WORD );
-
- Function SwatchExpired( Swatch1 : TSwatch;
- Expire100s : LONGINT ) : BOOLEAN;
-
- {------------------------}
- { System Clock Functions }
- {------------------------}
-
- Function SetTicksSinceMidnt( Ticks : LONGINT ) : BOOLEAN;
-
- Function GetTicksSinceMidnt( Var Days : BYTE ) : LONGINT;
-
-
- Function SetSysTime( BCDHours : BYTE;
- BCDMins : BYTE;
- BCDSecs : BYTE;
- DSTActive : BOOLEAN ) : BOOLEAN;
-
- Function GetSysTime( Var BCDHours : BYTE;
- Var BCDmins : BYTE;
- Var BCDSecs : BYTE;
- Var DSTActive : BOOLEAN ) : BOOLEAN;
-
- Function SetSysDate( BCDDay : BYTE;
- BCDMon : BYTE;
- BCDYear : BYTE;
- BCDCent : BYTE ) : BOOLEAN;
-
- Function GetSysDate( Var BCDDay : BYTE;
- Var BCDMon : BYTE;
- Var BCDYear : BYTE;
- Var BCDCent : BYTE ) : BOOLEAN;
-
- Function SetSysAlarmOn( BCDHours : BYTE;
- BCDMins : BYTE;
- BCDSecs : BYTE ) : BOOLEAN;
-
- Function SetSysAlarmOff : BOOLEAN;
-
-
- Procedure Sleep( Sleep100s : LONGINT );
-
- {════════════════════════════════════════════════════════════════════════════}
-
- Implementation
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function DayOfWeek( DT : TDateTime ) : WORD;
-
- [PARAMETERS]
-
- DT TDateTime (only Date part is important)
-
- [RETURNS]
-
- Day of week (0 = Sunday to 6 = Saturday)
-
- [DESCRIPTION]
-
- Finds out the day of the week from the given date.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function DayOfWeek( DT : TDateTime ) : WORD;
-
- Var
-
- Julian : TJulian;
-
- BEGIN
-
- DayOfWeek := Succ(DTtoJulian(DT)) MOD 7;
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function IsLeapYear( Year : WORD ) : BOOLEAN;
-
- [PARAMETERS]
-
- Year Source Year
-
- [RETURNS]
-
- Whether the source year is a leap year.
-
- [DESCRIPTION]
-
- Will return true if given year is a "leap year".
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function IsLeapYear( Year : WORD ) : BOOLEAN;
-
- BEGIN
-
- IsLeapYear := ( ( ( Year MOD 4 = 0 ) AND
- ( Year MOD 100 <> 0 ) ) OR
- ( Year MOD 400 = 0 ) );
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function LeapYearDays( Year : WORD ) : INTEGER;
-
- [PARAMETERS]
-
- Year Source Year
-
- [RETURNS]
-
- Number of days in leap year.
-
- [DESCRIPTION]
-
- Calculates the extra number of days in a given year (by figuring leap
- year and century). A no-leap year will be 0, a leap year will be 1, and
- a leap century will be 2.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function LeapYearDays( Year : WORD ) : INTEGER;
-
- Var
-
- Days : INTEGER;
-
- BEGIN
-
- Days := 0;
-
- If (Year MOD 4 = 0) AND (Year MOD 100 <> 0) Then
- Inc(Days);
-
- LeapYearDays := Days;
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function DaysInMonth( Month : WORD;
- Year : WORD ) : INTEGER;
-
- [PARAMETERS]
-
- Month Source Month
- Year Source Year
-
- [RETURNS]
-
- Number of Days in the Source Month.
-
- [DESCRIPTION]
-
- Based upon the provided Month and Year, returns the number of days that
- are in that month. This takes into account Leap Year Days for Feberuary.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function DaysInMonth( Month : WORD;
- Year : WORD ) : INTEGER;
-
- BEGIN
-
- If (Month = 2) Then
- DaysInMonth := cdtDaysInMonth[2] + Byte(LeapYearDays(Year))
- Else
- DaysInMonth := cdtDaysInMonth[Month];
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function IsDayLightSavings( DT : TDateTime ) : BOOLEAN;
-
- [PARAMETERS]
-
- DT Source Date and Hour
-
- [RETURNS]
-
- Returns whether DayLight Savings is in effect.
-
- [DESCRIPTION]
-
- Per an Act of Congress of 1986, the Spring Change Day was set to be
- the 1st Sunday in April with the Fall Change Day being the the last
- Sunday in October. Prior to this the Spring Change Day was the last
- Sunday in April.
-
- Per this Act, individual states and areas were free to elect to use
- DayLight Savings or not. Some of the areas which have Elected not to
- are Arizona, Hawaii, Peurto Rico, the Virgin Islands, the American
- Samoas, and part of the following States: Indiana, Kansas, Texas,
- Florida, Michigan, and Alaska.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function IsDayLightSavings( DT : TDateTime ) : BOOLEAN;
-
- Const
-
- SpringMonth = 4;
- FallMonth = 10;
- ChangeHour = 2; { 2 AM }
-
- Var
-
- DLS : BOOLEAN;
- DT2 : TDateTime;
- ThisDay : INTEGER;
-
- BEGIN
-
- If ( (DT.Month < SpringMonth) or (DT.Month > FallMonth) ) Then
- DLS := FALSE
- Else
-
- If ( (DT.Month > SpringMonth) And (DT.Month < FallMonth) ) Then
- DLS := TRUE
- Else
-
- If (DT.Month = SpringMonth) Then
- BEGIN
-
- {-------------------}
- { Find first Sunday }
- {-------------------}
-
- DT2 := DT;
- DT2.Day := 1;
-
- While DayOfWeek( DT2 ) <> 0 Do
- Inc(DT2.Day);
-
- If DT.Day < DT2.Day Then
- DLS := FALSE
- Else
-
- If DT.Day > DT2.Day Then
- DLS := TRUE
-
- Else
- BEGIN
-
- {------------------}
- { Compare 2am time }
- {------------------}
-
- If DT.Hour < ChangeHour Then
- DLS := FALSE
- Else
- DLS := TRUE;
-
- END;
-
- END
- Else
-
- If (DT.Month = FallMonth) Then
- BEGIN
-
- {------------------}
- { Find last Sunday }
- {------------------}
-
- DT2 := DT;
- DT2.Day := DaysInMonth(FallMonth, DT.Year);
-
- While DayOfWeek( DT2 ) <> 0 Do
- Dec(DT2.Day);
-
- If DT.Day < DT2.Day Then
- DLS := FALSE
- Else
-
- If DT.Day > DT2.Day Then
- DLS := TRUE
- Else
- BEGIN
-
- {------------------}
- { Compare 2am time }
- {------------------}
-
- If DT.Hour < ChangeHour Then
- DLS := FALSE
- Else
- DLS := TRUE;
-
- END;
-
- END;
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function IsTimePM( Swatch : TSwatch ) : BOOLEAN;
-
- [PARAMETERS]
-
- Swatch Source Time
-
- [RETURNS]
-
- Whether the source time is Post Meridian [PM]
-
- [DESCRIPTION]
-
- Returns whether the source time is AM or PM. If it is PM the function
- reports TRUE, else AM=FALSE.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function IsTimePM( Swatch : TSwatch ) : BOOLEAN;
-
- BEGIN
-
- IsTimePM := ( Swatch >= ( cdtSecsInDay DIV 2) );
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function CompleteYear( Year : WORD ) : WORD;
-
- [PARAMETERS]
-
- Year The partial year (ie. 93, but can be 1993 for completeness)
-
- [RETURNS]
-
- The completed year (ie. 1993)
-
- [DESCRIPTION]
-
- This figures out an incomplete given year. This uses cdtYearBase as the
- demarker between centuries.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- W := CompleteYear( 93 );
-
- { W = 1993 }
-
- W := CompleteYear( 3 );
-
- { W = 2003 }
-
- -*)
-
- Function CompleteYear( Year : WORD ) : WORD;
-
- BEGIN
-
- If (Year < 1900) Then
- Year := Year + 1900;
-
- If (Year < cdtYearBase) Then
- Year := Year + 100;
-
- CompleteYear := Year;
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function VDatesMaskStr( DTEx : TDateTimeEx;
- MaskStr : STRING ) : STRING;
-
- [PARAMETERS]
-
- DTEx Date and time set with extensions.
- MaskStr String to put date and time set "over".
-
- [RETURNS]
-
- Formatted string.
-
- [DESCRIPTION]
-
- Converts a date and time set into a string using a specified template.
-
- Some of the command entries are:
-
- 'Y' = Year.
- 'M' = Month.
- 'D' = Day.
- 'H' = Hour.
- 'I' = Minute.
- 'S' = Second.
- 'W' = Day of Week.
- '1' = 100th Second.
- '#' = Use a value formatting of next entry.
- '$' = Use a string formatting of next entry.
- '+' = Complete the previous entry.
-
- NOTES:
-
- ■ Years default to the 2-character representation of that year. For
- example, '93' for the year 1993. If the whole '1993' needs to be
- shown, use string formatting as '$YYYY' or '$Y+'.
-
- ■ Days, if toggled with string formatting, will add an ordinal suffix
- to the output. For example: on day 12, '$D+' would return '12th'.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- Var
-
- DTEx : TDateTimeEx;
- S : STRING;
-
- BEGIN
-
- DTEx.Year := 1993;
- DTEx.Month := 11;
- DTEx.Day := 1;
- DTEx.Hour := 12;
- DTEx.Min := 34;
- DTEx.Sec := 56;
- DTEx.Sec100 := 561;
-
- S := VDatesMaskStr( DTEx, '$M+' );
-
- { S = 'November' }
-
- S := VDatesMaskStr( DTEx, 'W+ M+/D+/Y+ H+:I+:S+.1+' );
-
- { S = 'Monday 11/1/1993 12:34:56.0' }
-
- S := VDatesMaskStr( DTEx, 'WW DD/MM/YY' );
-
- { S = 'Mo 1/11/93' }
-
- -*)
-
- Function VDatesMaskStr( DTEx : TDateTimeEx;
- MaskStr : STRING ) : STRING;
-
- Const
-
- MaxMode = 11;
-
- Type
-
- TModeRec = RECORD
-
- Mask : CHAR;
- Index : BYTE;
- S : STRING[20]; { MaxCount = Length(S) }
-
- END;
-
- TModes = Array[1..MaxMode] of TModeRec;
-
- Var
-
- DT : TDateTime;
- Mode : TModes;
- Last : BYTE;
- Times: INTEGER;
- S : STRING;
-
- L1 : BYTE;
- L2 : BYTE;
- L3 : BYTE;
-
- BEGIN
-
- {-------------------------}
- { Initialize lookup table }
- {-------------------------}
-
- For L1 := 1 to MaxMode Do
- Mode[L1].Index := 1;
-
- Mode[1].Mask := 'Y'; { Year }
- Mode[2].Mask := 'M'; { Month }
- Mode[3].Mask := 'D'; { Day }
- Mode[4].Mask := 'H'; { Hours }
- Mode[5].Mask := 'I'; { Minutes }
- Mode[6].Mask := 'S'; { Seconds }
- Mode[7].Mask := 'W'; { DayOfWeek }
- Mode[8].Mask := '1'; { Seconds (100th) }
- Mode[9].Mask := '#'; { Value of next entry }
- Mode[10].Mask := '$'; { String of next entry }
- Mode[11].Mask := '+'; { Complete last entry }
-
- {---------------------------}
- { Default entry definations }
- {---------------------------}
-
- Mode[1].S := IntToStr(DTEx.Year);
- Mode[1].S := CopyStr( Mode[1].S,
- LesserInt( Byte(Mode[1].S[0]), 3 ),
- LesserInt( Byte(Mode[1].S[0]), 2 ) );
- Mode[2].S := IntToStr(DTEx.Month);
- Mode[3].S := IntToStr(DTEx.Day);
- Mode[4].S := Pad( IntToStr(DTEx.Hour), 2, OnLeft, '0' );
- Mode[5].S := Pad( IntToStr(DTEx.Min), 2, OnLeft, '0' );
- Mode[6].S := Pad( IntToStr(DTEx.Sec), 2, OnLeft, '0' );
-
- ExToDateTime( DTEx, DT );
- Mode[7].S := cdtDayStr[DayOfWeek(DT)]; { !! Assumes to calc DOW; not given }
-
- Mode[8].S := IntToStr(DTEx.Sec100);
- Mode[9].S := ' ';
- Mode[10].S := ' ';
- Mode[11].S := ' ';
-
- S := '';
- Last := 0;
-
- {---------------------------}
- { Now scan through mask and }
- { create output string from }
- {---------------------------}
-
- For L1 := 1 to Byte(MaskStr[0]) Do
- BEGIN
-
- {-----------------------------------}
- { Look for mask character in lookup }
- {-----------------------------------}
-
- L2 := 1;
-
- While (L2 <= MaxMode) AND
- (MaskStr[L1] <> Mode[L2].Mask) Do
- Inc(L2);
-
- If L2 > MaxMode Then
- S := S + MaskStr[L1]
- Else
-
- If Mode[L2].Index <= Byte(Mode[L2].S[0]) Then
- BEGIN
-
- Times := 1;
-
- Case L2 of
-
- 9 :
-
- BEGIN
-
- If Succ(L1) <= Byte(MaskStr[0]) Then
- BEGIN
-
- Inc(L1);
-
- L2 := 1;
-
- While (L2 <= MaxMode) AND
- (MaskStr[L1] <> Mode[L2].Mask) Do
- Inc(L2);
-
- If L2 <= MaxMode Then
- BEGIN
-
- If NOT ValidLong( Mode[L2].S ) Then
- BEGIN
-
- Case L2 Of
-
- 1 : Mode[1].S := CopyStr(IntToStr(DTEx.Year), 3, 2);
- 2 : Mode[2].S := IntToStr(DTEx.Month);
- 3 : Mode[3].S := IntToStr(DTEx.Day);
- 4 : Mode[4].S := Pad(IntToStr(DTEx.Hour),2,OnLeft,'0');
- 5 : Mode[5].S := Pad(IntToStr(DTEx.Min),2,OnLeft,'0');
- 6 : Mode[6].S := Pad(IntToStr(DTEx.Sec),2,OnLeft,'0');
- 7 :
- BEGIN
- ExToDateTime(DTEx, DT);
- Mode[7].S := IntToStr(DayOfWeek(DT)); { !! }
- END;
-
- 8 : Mode[8].S := IntToStr(DTEx.Sec100);
-
- End;
-
- END;
-
- END;
-
- END;
-
- END;
-
- 10 :
-
- BEGIN
-
- If Succ(L1) <= Byte(MaskStr[0]) Then
- BEGIN
-
- Inc(L1);
-
- L2 := 1;
-
- While (L2 <= MaxMode) AND
- (MaskStr[L1] <> Mode[L2].Mask) Do
- Inc(L2);
-
- If L2 <= MaxMode Then
- BEGIN
-
- If ValidLong( Mode[L2].S ) Then
- BEGIN
-
- Case L2 Of
-
- 1 : Mode[1].S := IntToStr(DTEx.Year);
- 2 : Mode[2].S := cdtMonthStr[DTEx.Month];
- { !^! 3 : Mode[3].S := IntToStr(DTEx.Day) + OrdSuffix(DTEx.Day);}
- 4 : Mode[4].S := IntToText(DTEx.Hour);
- 5 : Mode[5].S := IntToText(DTEx.Min);
- 6 : Mode[6].S := IntToText(DTEx.Sec);
- 7 :
- BEGIN
- ExToDateTime(DTEx, DT);
- Mode[7].S := cdtDayStr[DayOfWeek(DT)]; { !! }
- END;
-
- 8 : Mode[8].S := IntToText(DTEx.Sec100);
-
- End;
-
- END;
-
- END;
-
- END;
-
- END;
-
- 11 :
-
- BEGIN
-
- L2 := Last;
- Times := Byte(Mode[L2].S[0]) - Mode[L2].Index + 1;
-
- END;
-
- End;
-
- For L3 := 1 to Times Do
- BEGIN
-
- S := S + Mode[L2].S[ Mode[L2].Index ];
- Inc(Mode[L2].Index);
-
- END;
-
- Last := L2;
-
- END;
-
- END;
-
- VDatesMaskStr := S;
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function ValidDate( Year : WORD;
- Month : WORD;
- Day : WORD ) : BOOLEAN;
-
- [PARAMETERS]
-
- Day Source Day
- Mon Source Month
- Year Source Year
-
- [RETURNS]
-
- Condition of values.
-
- [DESCRIPTION]
-
- Checks if all values are within their proper range.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function ValidDate( Year : WORD;
- Month : WORD;
- Day : WORD ) : BOOLEAN;
-
- BEGIN
-
- ValidDate := (Day >= 1) AND
- (Day <= DaysInMonth(Month, Year)) AND
- (Month >= 1) AND
- (Month <= 12) AND
- (Year >= cdtYearBase);
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function ValidTime( Hour : WORD;
- Min : WORD;
- Sec : WORD ) : BOOLEAN;
-
- [PARAMETERS]
-
- Hour Source Hours
- Min Source Minutes
- Sec Source Seconds
-
- [RETURNS]
-
- Condition of values.
-
- [DESCRIPTION]
-
- Checks if all values are within their proper range.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function ValidTime( Hour : WORD;
- Min : WORD;
- Sec : WORD ) : BOOLEAN;
-
- BEGIN
-
- ValidTime := (Hour < 24) AND
- (Min < 60) AND
- (Sec < 60);
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function ValidDateTime( DT : TDateTime ) : BOOLEAN;
-
- [PARAMETERS]
-
- DT Source DateTime
-
- [RETURNS]
-
- Condition of values.
-
- [DESCRIPTION]
-
- Checks if all values are within their proper range.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function ValidDateTime( DT : TDateTime ) : BOOLEAN;
-
- BEGIN
-
- ValidDateTime := ValidTime( DT.Hour, DT.Min, DT.Sec ) AND
- ValidDate( DT.Day, DT.Month, DT.Year );
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function ValidPacked( PackedDT : TPackedDT ) : BOOLEAN;
-
- [PARAMETERS]
-
- PackedDT Source Packed DateTime
-
- [RETURNS]
-
- Condition of values.
-
- [DESCRIPTION]
-
- Checks if all values are within their proper range.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function ValidPacked( PackedDT : TPackedDT ) : BOOLEAN;
-
- Var
-
- DT : TDateTime;
-
- BEGIN
-
- UnpackTime(PackedDT, DT);
- ValidPacked := ValidDateTime(DT);
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function ValidSwatch( Swatch : TSwatch ) : BOOLEAN;
-
- [PARAMETERS]
-
- Swatch Source StopWatch
-
- [RETURNS]
-
- Condition of values.
-
- [DESCRIPTION]
-
- Checks if all values are within their proper range.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function ValidSwatch( Swatch : TSwatch ) : BOOLEAN;
-
- BEGIN
-
- ValidSwatch := ( Swatch >= 0 ) AND
- ( Round(Swatch) < cdtSecsInDay );
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Procedure CurrDateTime( Var DT : TDateTime );
-
- [PARAMETERS]
-
- DT Variable to put clock date/time into
-
- [RETURNS]
-
- (VAR : DOS date/time )
-
- [DESCRIPTION]
-
- Returns the current date and time set in the operating system
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Procedure CurrDateTime( Var DT : TDateTime );
-
- Var
-
- Temp : WORD;
-
- BEGIN
-
- GetDate( DT.Year, DT.Month, DT.Day, Temp );
- GetTime( DT.Hour, DT.Min, DT.Sec, Temp );
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function DateTimeStr( DT : TDateTime ) : STRING;
-
- [PARAMETERS]
-
- DT Date/Time to convert
-
- [RETURNS]
-
- Converted string
-
- [DESCRIPTION]
-
- Converts Date/Time into string following the template as defined in
- the variable constant cdpDateTimeMask.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function DateTimeStr( DT : TDateTime ) : STRING;
-
- Var
-
- DTEx : TDateTimeEx;
-
- BEGIN
-
- DateTimeToEx( DT, DTEx );
- DateTimeStr := VDatesMaskStr( DTEx, cdtDateTimeMask );
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function DateTimeMaskStr( DT : TDateTime;
- Mask : STRING ) : STRING;
-
- [PARAMETERS]
-
- DT Date/Time to convert
-
- [RETURNS]
-
- Converted string
-
- [DESCRIPTION]
-
- Converts Date/Time into string following the template of Mask.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function DateTimeMaskStr( DT : TDateTime;
- Mask : STRING ) : STRING;
- Var
-
- DTEx : TDateTimeEx;
-
- BEGIN
-
- DateTimeToEx( DT, DTEx );
- DateTimeMaskStr := VDatesMaskStr( DTEx, Mask );
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Procedure IncDateTime( Var DT : TDateTime );
-
- [PARAMETERS]
-
- DT Date/Time to increment
-
- [RETURNS]
-
- DT Incremented Date/Time
-
- [DESCRIPTION]
-
- Increments a Date/Time record by one second. Adjusts components accordingly.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Procedure IncDateTime( Var DT : TDateTime );
-
- Var
- DTemp : TDateTime;
-
- BEGIN
-
- DTemp := DT;
-
- Inc( DT.Sec );
-
- While (DT.Sec > 59) Do
- BEGIN
-
- Dec( DT.Sec, 60 );
- Inc( DT.Min );
-
- END; { While DT.Sec }
-
- While (DT.Min > 59) Do
- BEGIN
-
- Dec( DT.Min, 60 );
- Inc( DT.Hour );
-
- END; { While DT.Min }
-
- While (DT.Hour > 23) Do
- BEGIN
-
- Dec( DT.Hour, 24 );
- Inc( DT.Day );
-
- END; { While DT.Hour }
-
- While (DT.Day > DaysInMonth( DT.Month MOD 12+1, DT.Year ) ) Do
- BEGIN
-
- Dec( DT.Day, DaysInMonth( DT.Month MOD 12+1, DT.Year ) );
- Inc( DT.Month );
-
- END; { While DT.Day }
-
- While (DT.Month > 12) Do
- BEGIN
-
- Dec( DT.Month, 12 );
- Inc( DT.Year );
-
- END; { While DT.Month }
-
- If NOT ValidDateTime( DT ) Then
- DT := DTemp;
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Procedure DecDateTime( Var DT : TDateTime );
-
- [PARAMETERS]
-
- DT Date/Time to decrement
-
- [RETURNS]
-
- DT Decremented Date/Time
-
- [DESCRIPTION]
-
- Decrements a Date/Time record by one second. Adjusts components accordingly.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Procedure DecDateTime( Var DT : TDateTime );
-
- Var
-
- DTemp : TDateTime;
-
- BEGIN
-
- DTemp := DT;
-
- Dec( DT.Sec, 1 );
-
- While (DT.Sec < 0) Do
- BEGIN
-
- Inc( DT.Sec, 60 );
- Dec( DT.Min );
-
- END;
-
- While (DT.Min < 0) Do
- BEGIN
-
- Inc( DT.Min, 60 );
- Dec( DT.Hour );
-
- END;
-
- While (DT.Hour < 0) Do
- BEGIN
-
- Inc( DT.Hour, 24 );
- Dec( DT.Day );
-
- END;
-
- While (DT.Day < 1) Do
- BEGIN
-
- Inc( DT.Day, DaysInMonth( (DT.Month-1) MOD 12 + 1, DT.Year ) );
- Dec( DT.Month );
-
- END;
-
- While (DT.Month < 1) Do
- BEGIN
-
- Inc( DT.Month, 12 );
- Dec( DT.Year );
-
- END;
-
- If NOT ValidDateTime( DT ) Then
- DT := DTemp;
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Procedure AddDateTime( DTAdd : TDateTime;
- Var DT : TDateTime );
-
- [PARAMETERS]
-
- DTAdd Date/Time to add
-
- [RETURNS]
-
- DT Base TDateTime with additions
-
- [DESCRIPTION]
-
- Adds specified DateTime components to a given TDateTime.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Procedure AddDateTime( DTAdd : TDateTime;
- Var DT : TDateTime );
-
- VAR
-
- DTemp : TDateTime;
- Hr,Min,Sec : INTEGER;
- Day,Mon,Yr : INTEGER;
-
- BEGIN
-
- DTemp := DT;
-
- Hr := DT.Hour;
- Min := DT.Min;
- Sec := DT.Sec;
- Day := DT.Day;
- Mon := DT.Month;
- Yr := DT.Year;
-
- Inc( Hr, DTAdd.Hour );
- Inc( Min, DTAdd.Min );
- Inc( Sec, DTAdd.Sec );
- Inc( Day, DTAdd.Day );
- Inc( Mon, DTAdd.Month );
- Inc( Yr, DTAdd.Year );
-
- While (Sec > 59) Do
- BEGIN
-
- Dec( Sec, 60 );
- Inc( Min );
-
- END; { If Sec }
-
- While (Min > 59) Do
- BEGIN
-
- Dec( Min, 60 );
- Inc( Hr );
-
- END; { If Min }
-
- While (Hr > 23) Do
- BEGIN
-
- Dec( Hr, 24 );
- Inc( Day );
-
- END; { If Hr }
-
- While (Mon > 12) Do
- BEGIN
-
- Dec( Mon, 12 );
- Inc( Yr );
-
- END; { If Mon }
-
- While (Day > DaysInMonth( Mon, Yr ) ) Do
- BEGIN
-
- Dec( Day, DaysInMonth( Mon, Yr ) );
- Inc( Mon );
-
- If (Mon > 12) Then
- BEGIN
-
- Dec( Mon, 12 );
- Inc( Yr );
-
- END; { If Mon }
-
- END; { If Day }
-
- DT.Hour := Hr;
- DT.Min := Min;
- DT.Sec := Sec;
- DT.Day := Day;
- DT.Month := Mon;
- DT.Year := Yr;
-
- If NOT ValidDateTime( DT ) Then
- DT := DTemp;
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Procedure SubDateTime( DTSub : TDateTime;
- Var DT : TDateTime );
-
- [PARAMETERS]
-
- DTSub Date/Time to subtract
-
- [RETURNS]
-
- DT Base TDateTime with subtractions.
-
- [DESCRIPTION]
-
- Subtracts specified DateTime components to a given TDateTime.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Procedure SubDateTime( DTSub : TDateTime;
- Var DT : TDateTime );
-
- Var
-
- Hr,Min,Sec : INTEGER;
- Day,Mon,Yr : INTEGER;
-
- BEGIN
-
- Hr := DT.Hour;
- Min := DT.Min;
- Sec := DT.Sec;
- Day := DT.Day;
- Mon := DT.Month;
- Yr := DT.Year;
-
- Dec( Hr, DTSub.Hour );
- Dec( Min, DTSub.Min );
- Dec( Sec, DTSub.Sec );
- Dec( Day, DTSub.Day );
- Dec( Mon, DTSub.Month );
- Dec( Yr, DTSub.Year );
-
- While (Sec < 0) Do
- BEGIN
-
- Inc( Sec, 60 );
- Dec( Min );
-
- END; { While Sec }
-
- While (Min < 0) Do
- BEGIN
-
- Inc( Min, 60 );
- Dec( Hr );
-
- END; { While Min }
-
- While (Hr < 0) Do
- BEGIN
-
- Inc( Hr, 24 );
- Dec( Day );
-
- END; { While Hr }
-
- While (Mon < 1) Do
- BEGIN
-
- Inc( Mon, 12 );
- Dec( Yr );
-
- END; { While Mon }
-
- While (Day < 1) Do
- BEGIN
-
- If Mon = 1 Then
- Inc( Day, DaysInMonth( (Mon-2) MOD 12 + 13, Yr-1 ) )
-
- Else
- Inc( Day, DaysInMonth( (Mon-2) MOD 12 + 1, Yr ) );
-
- Dec( Mon );
-
- If (Mon < 1) Then
- BEGIN
-
- Inc( Mon, 12 );
- Dec( Yr );
-
- END; { If Mon }
-
- END; { While Day }
-
- DT.Hour := Hr;
- DT.Min := Min;
- DT.Sec := Sec;
- DT.Day := Day;
- DT.Month := Mon;
- DT.Year := Yr;
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Procedure DateTimeDiff( DT1 : TDateTime;
- DT2 : TDateTime;
- Var DTDiff : TDateTime );
-
- [PARAMETERS]
-
- DT1 Date/Time #1
- DT2 Date/Time #2
-
- [RETURNS]
-
- DTDiff Date/Time differences
-
- [DESCRIPTION]
-
- Calculates the absolute difference (distance between) the two given
- TDateTime types.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Procedure DateTimeDiff( DT1 : TDateTime;
- DT2 : TDateTime;
- Var DTDiff : TDateTime );
-
- Var
-
- P1 : TPackedDT;
- P2 : TPackedDT;
-
- BEGIN
-
- PackTime( DT1, P1 );
- PackTime( DT2, P2 );
-
- If P1 > P2 Then
- BEGIN
-
- DTDiff := DT1;
- SubDateTime( DT2, DTDiff );
-
- END
- Else
- BEGIN
-
- DTDiff := DT2;
- SubDateTime( DT1, DTDiff );
-
- END;
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Procedure ExToDateTime( DTEx : TDateTimeEx;
- Var DT : TDateTime );
-
- [PARAMETERS]
-
- DTEx DateTime with extensions
-
- [RETURNS]
-
- DT DateTime without extensions
-
- [DESCRIPTION]
-
- Removes the DOW and Sec100 from a TDateTimeEx type and puts the
- rest into a TDateTime type.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Procedure ExToDateTime( DTEx : TDateTimeEx;
- Var DT : TDateTime );
-
- BEGIN
-
- DT.Year := DTEx.Year;
- DT.Month := DTEx.Month;
- DT.Day := DTEx.Day;
- DT.Hour := DTEx.Hour;
- DT.Min := DTEx.Min;
- DT.Sec := DTEx.Sec;
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Procedure DateTimeToEx( DT : TDateTime;
- Var DTEx : TDateTimeEx );
-
- [PARAMETERS]
-
- DT DateTime without Extensions
-
- [RETURNS]
-
- DTEx DateTime with Extensions (initialized)
-
- [DESCRIPTION]
-
- Creates a TDateTimeEx type from a given TDateTime type. This only
- initializes the extensions.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Procedure DateTimeToEx( DT : TDateTime;
- Var DTEx : TDateTimeEx );
-
- BEGIN
-
- DTEx.Year := DT.Year;
- DTEx.Month := DT.Month;
- DTEx.Day := DT.Day;
- DTEx.Hour := DT.Hour;
- DTEx.Min := DT.Min;
- DTEx.Sec := DT.Sec;
- DTEx.DOW := 0;
- DTEx.Sec100:= 0;
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function DTtoJulian( DT : TDateTime ) : TJulian;
-
- [PARAMETERS]
-
- DT Day/Month/Year to convert
-
- [RETURNS]
-
- Julian date
-
- [DESCRIPTION]
-
- Converts a Gregorian calendar Day, Month, and Year into a Julian calendar
- date (linear date system).
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function DTtoJulian( DT : TDateTime ) : TJulian;
-
- Var
-
- AY : INTEGER;
- Y : WORD;
- M : BYTE;
- D : TJulian;
- G : TJulian;
-
- BEGIN
-
- AY := DT.Year;
-
- If AY < 0 Then
- Y := AY + 4717
- Else
- Y := AY + 4716;
-
- If DT.Month < 3 Then
- BEGIN
-
- M := LongInt(DT.Month) + 12;
- Dec(Y);
- Dec(AY);
-
- END
- Else
- M := LongInt(DT.Month);
-
- D := ( 1461 * LongInt(Y)) SHR 2 + (153 * (Succ(M)) DIV 5) +
- LongInt(DT.Day) - 1524;
-
- G := D + 2 - AY DIV 100 + AY DIV 400 - AY DIV 4000;
-
- If G >= 2299161 Then
- DTtoJulian := G
- Else
- DTtoJulian := D;
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Procedure JulianToDT( J : TJulian;
- Var DT : TDateTime );
-
- [PARAMETERS]
-
- J Julian date
-
- [RETURNS]
-
- DT TDateTime with Day/Month/Year filled
-
- [DESCRIPTION]
-
- Converts a Julian calendar date (linear date system) into its Gregorian
- Day, Month, and Year equivalent.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Procedure JulianToDT( J : TJulian;
- Var DT : TDateTime );
-
-
- Var
-
- AA,
- AB,
- A : TJulian;
- B,
- D,
- EE : LONGINT;
- C : WORD;
- E : BYTE;
- Y : INTEGER;
-
- BEGIN
-
- If J < 2299161 Then
- A := LongInt(J)
- Else
- BEGIN
-
- AA := J - 1721120;
- AB := 31 * (AA DIV 1460969);
- AA := AA MOD 1460969;
- AB := AB + 3 * (AA DIV 146097);
- AA := AA MOD 146097;
-
- If AA = 146096 Then
- AB := AB + 3
- Else
- AB := AB + AA DIV 36524;
-
- A := J + (AB - 2)
-
- END;
-
- B := A + 1524;
- C := (20 * B - 2442) DIV 7305;
- D := 1461 * LongInt(C) SHR 2;
- EE := B - D;
- E := 10000 * EE DIV 306001;
- DT.Day := Word(EE - 306001 * E DIV 10000);
-
- If E >= 14 Then
- DT.Month := Word(E - 13)
- Else
- DT.Month := Word(Pred(E));
-
- If DT.Month > 2 Then
- Y := C - 4716
- Else
- Y := C - 4715;
-
- If Y < 1 Then
- DT.Year := Word(Pred(Y))
- Else
- DT.Year := Word(Y);
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function DTtoSwatch( DT : TDateTime ) : TSwatch;
-
- [PARAMETERS]
-
- DT Date/Time (date part is ignored)
-
- [RETURNS]
-
- Swatch with hours, minutes, and seconds.
-
- [DESCRIPTION]
-
- Converts a TDateTime type into a swatch. Note that the date portion is
- ignored.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function DTtoSwatch( DT : TDateTime ) : TSwatch;
-
- BEGIN
-
- DTtoSwatch := HMS1toSwatch( DT.Hour, DT.Min, DT.Sec, 0 );
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Procedure SwatchToDT( Swatch : TSwatch;
- Var DT : TDateTime );
-
- [PARAMETERS]
-
- Swatch TSwatch source
-
- [RETURNS]
-
- TDateTime type with hour, min, and sec filled.
-
- [DESCRIPTION]
-
- Converts a TSwatch type into a TDateTime with hour, min, and sec filled.
- Note that the date portion of the TDateTime is ignored.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Procedure SwatchToDT( Swatch : TSwatch;
- Var DT : TDateTime );
-
- Var
-
- Sec100 : WORD;
-
- BEGIN
-
- SwatchToHMS1( Swatch, DT.Hour, DT.Min, DT.Sec, Sec100 );
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function DTtoUnix( DT : TDateTime ) : TUnixDT;
-
- [PARAMETERS]
-
- DT TDateTime source
-
- [RETURNS]
-
- Unix time code (base 1970)
-
- [DESCRIPTION]
-
- This converts a TDateTime into seconds from January 1st, 1970 (12:00 AM
- Greenwich time).
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function DTtoUnix( DT : TDateTime ) : TUnixDT;
-
- BEGIN
-
- { do time zone stuff later }
-
- DTToUnix := ( (DTtoJulian(DT) - cdtUnixBase) * cdtSecsInDay) +
- Round(DTtoSwatch(DT) );
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Procedure UnixToDT( UnixDT : TUnixDT;
- Var DT : TDateTime );
-
- [PARAMETERS]
-
- UnixDT Unix time code (base 1970)
-
- [RETURNS]
-
- TDateTime destination
-
- [DESCRIPTION]
-
- Converts a Unix time code (seconds from base January 1st, 1970 12:00 AM
- Greenwich time) into a DateTime type.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Procedure UnixToDT( UnixDT : TUnixDT;
- Var DT : TDateTime );
-
- BEGIN
-
- JulianToDT( (UnixDT DIV cdtSecsInDay) + cdtUnixBase, DT );
- SwatchToDT( (UnixDT MOD cdtSecsInDay), DT );
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function CurrPackedDT : TPackedDT;
-
- [PARAMETERS]
-
- [RETURNS]
-
- Packed Date/Time
-
- [DESCRIPTION]
-
- Returns the current date and time set in a 4-byte bitfield record.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function CurrPackedDT : TPackedDT;
-
- Var
-
- DT : TDateTime;
- PDT: TPackedDT;
-
- BEGIN
-
- CurrDateTime( DT );
- PackTime( DT, PDT );
- CurrPackedDT := PDT;
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function GetPackedDate( PackedDT : TPackedDT ) : WORD;
-
- [PARAMETERS]
-
- PackedDT Packed TDateTime
-
- [RETURNS]
-
- Date as a WORD
-
- [DESCRIPTION]
-
- Returns date portion of a packed TDateTime.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function GetPackedDate( PackedDT : TPackedDT ) : WORD;
-
- BEGIN
-
- GetPackedDate := PackedDT SHR $10;
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function GetPackedTime( PackedDT : TPackedDT ) : WORD;
-
- [PARAMETERS]
-
- PackedDT Packed TDateTime
-
- [RETURNS]
-
- Time as a WORD
-
- [DESCRIPTION]
-
- Returns time portion of a packed TDateTime.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function GetPackedTime( PackedDT : TPackedDT ) : WORD;
-
- BEGIN
-
- GetPackedTime := PackedDT AND $FFFF;
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function CurrSwatch : TSwatch;
-
- [PARAMETERS]
-
- [RETURNS]
-
- Swatch time.
-
- [DESCRIPTION]
-
- Returns the current time set of the operating system in seconds.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function CurrSwatch : TSwatch;
-
- Var
-
- DTEx : TDateTimeEx;
-
- BEGIN
-
- GetTime( DTEx.Hour, DTEx.Min, DTEx.Sec, DTEx.Sec100 );
- CurrSwatch := ( DTEx.Hour * 3600 ) +
- ( DTEx.Min * 60 ) +
- ( DTEx.Sec ) +
- ( DTEx.Sec100 / 100 );
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function HMS1ToSwatch( Hour : WORD;
- Min : WORD;
- Sec : WORD;
- Sec100 : WORD ) : TSwatch;
-
- [PARAMETERS]
-
- Hour Source hour
- Min Source minute
- Sec Source second
-
- [RETURNS]
-
- Swatch time.
-
- [DESCRIPTION]
-
- Converts the given Hour/Min/Sec into a TSwatch type.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function HMS1ToSwatch( Hour : WORD;
- Min : WORD;
- Sec : WORD;
- Sec100 : WORD ) : TSwatch;
-
- BEGIN
-
- HMS1ToSwatch := ( Hour * 3600 ) +
- ( Min * 60 ) +
- ( Sec ) +
- ( Sec100 div 100 );
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Procedure SwatchToHMS1( Swatch : TSwatch;
- Var Hour : WORD;
- Var Min : WORD;
- Var Sec : WORD;
- Var Sec100 : WORD );
-
- [PARAMETERS]
-
- Swatch Given TSwatch type
-
- [RETURNS]
-
- Hour Hour of Swatch
- Min Minute of Swatch
- Sec Second of Swatch
- Sec100 100th second of Swatch
-
- [DESCRIPTION]
-
- Converts a TSwatch type into its Hour/Min/Sec/Sec100 components.
-
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Procedure SwatchToHMS1( Swatch : TSwatch;
- Var Hour : WORD;
- Var Min : WORD;
- Var Sec : WORD;
- Var Sec100 : WORD );
-
- BEGIN
-
- Hour := Round(Swatch) DIV 3600;
- Min := (Round(Swatch) MOD 3600 ) DIV 60;
- Sec := Round(Swatch) MOD 60;
- Sec100 := Round(Frac(Swatch) * 100);
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function SwatchStr( Swatch : TSwatch ) : STRING;
-
- [PARAMETERS]
-
- Swatch Given TSwatch type
-
- [RETURNS]
-
- Swatch as a string.
-
- [DESCRIPTION]
-
- Converts a TSwatch type into a string using 'cdtSwatchMask' for string
- formatting.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function SwatchStr( Swatch : TSwatch ) : STRING;
-
- Var
-
- DTEx : TDateTimeEx;
-
- BEGIN
-
- SwatchToHMS1( Swatch, DTEx.Hour, DTEx.Min, DTEx.Sec, DTEx.Sec100 );
- SwatchStr := VDatesMaskStr( DTEx, cdtSwatchMask );
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function SwatchMaskStr( Swatch : TSwatch;
- Mask : STRING ) : STRING;
-
- [PARAMETERS]
-
- Swatch Given TSwatch type
-
- [RETURNS]
-
- Swatch as a string.
-
- [DESCRIPTION]
-
- Converts a TSwatch type into a string using user-supplied mask for string
- formatting.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function SwatchMaskStr( Swatch : TSwatch;
- Mask : STRING ) : STRING;
-
- Var
-
- DTEx : TDateTimeEx;
-
- BEGIN
-
- SwatchToHMS1( Swatch, DTEx.Hour, DTEx.Min, DTEx.Sec, DTEx.Sec100 );
- SwatchMaskStr := VDatesMaskStr( DTEx, Mask );
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function AddSwatch( Swatch : TSwatch;
- Hours : WORD;
- Mins : WORD;
- Secs : WORD;
- Sec100s : WORD ) : TSwatch;
-
- [PARAMETERS]
-
- Swatch TSwatch used as base time
- Hours Hours to add
- Mins Minutes to add
- Secs Seconds to add
- Sec100s 100th seconds to add
-
- [RETURNS]
-
- TSwatch type
-
- [DESCRIPTION]
-
- Adds hours, minutes, seconds, and 100th seconds to a Swatch. It will loop
- around at every midnight;
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function AddSwatch( Swatch : TSwatch;
- Hours : WORD;
- Mins : WORD;
- Secs : WORD;
- Sec100s : WORD ) : TSwatch;
-
- Var
-
- Swatch2 : TSwatch;
-
- BEGIN
-
- Swatch2 := Swatch + HMS1toSwatch( Hours, Mins, Secs, Sec100s );
-
- While (Swatch2 > cdtSecsInDay) Do
- Swatch2 := Swatch2 - cdtSecsInDay;
-
- AddSwatch := Swatch2;
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function SubSwatch( Swatch : TSwatch;
- Hours : WORD;
- Mins : WORD;
- Secs : WORD;
- Sec100s : WORD ) : TSwatch;
-
- [PARAMETERS]
-
- Swatch TSwatch used as base time
- Hours Hours to subtract
- Mins Minutes to subtract
- Secs Seconds to subtract
- Sec100s 100th seconds to subtract
-
- [RETURNS]
-
- TSwatch type
-
- [DESCRIPTION]
-
- Subtracts hours, minutes, seconds, and 100th seconds to a Swatch. It
- will loop around at every midnight.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function SubSwatch( Swatch : TSwatch;
- Hours : WORD;
- Mins : WORD;
- Secs : WORD;
- Sec100s : WORD ) : TSwatch;
-
- Var
-
- Swatch2 : TSwatch;
-
- BEGIN
-
- Swatch2 := HMS1toSwatch( Hours, Mins, Secs, Sec100s );
-
- While (Swatch2 > cdtSecsInDay) Do
- Swatch2 := Swatch2 - cdtSecsInDay;
-
- Swatch2 := Swatch - Swatch2;
-
- If Swatch2 < 0 Then
- SubSwatch := Swatch2 + cdtSecsInDay
- Else
- SubSwatch := Swatch2;
-
- END;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Procedure SwatchDiff( Swatch1 : TSwatch;
- Swatch2 : TSwatch;
- Var Hours : WORD;
- Var Mins : WORD;
- Var Secs : WORD;
- Var Sec100s : WORD );
-
- [PARAMETERS]
-
- Swatch1 TSwatch #1
- Swatch2 TSwatch #2
-
- [RETURNS]
-
- Hours Hour(s) difference
- Mins Min(s) difference
- Secs Second(s) difference
- Sec100s 100th second(s) difference
-
- [DESCRIPTION]
-
- Returns the absolute difference (distance) between the two given Swatches.
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Procedure SwatchDiff( Swatch1 : TSwatch;
- Swatch2 : TSwatch;
- Var Hours : WORD;
- Var Mins : WORD;
- Var Secs : WORD;
- Var Sec100s : WORD );
-
- Var
-
- Swatch3 : TSwatch;
-
- BEGIN
-
- Swatch3 := Abs( Swatch1 - Swatch2 );
- SwatchToHMS1( Swatch3, Hours, Mins, Secs, Sec100s );
-
- END;
-
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function SwatchExpired( Swatch1 : TSwatch;
- Expire100s : LONGINT ) : BOOLEAN
-
-
- [PARAMETERS]
-
- Swatch1 TSwatch #1
- Expire100s Number of 100s after which the swatch will expire
-
- [RETURNS]
-
- TRUE if "Expire100s" have passed since "Swatch1" or
- FALSE if "Expire100s" have NOT passed since "swatch1".
-
-
- [DESCRIPTION]
-
- Determines if a given "expire100s" count of 100/ths of a second have
- passed since a given "swatch1" was "set".
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- SaveSwatch := CurrSwatch;
-
- If Not SwatchExpired( SaveSwatch, 200 ) Then
- Write( '.');
-
- { will write '.' until 2 seconds have passed. }
-
-
- -*)
-
-
- Function SwatchExpired( Swatch1 : TSwatch;
- Expire100s : LONGINT ) : BOOLEAN;
-
- Var
-
- TheCurrSwatch : TSwatch;
- YesterdayDiff : REAL;
-
- BEGIN
-
- TheCurrSwatch := CurrSwatch;
-
- {-----------------------------}
- { did we roll past midnight?? }
- {-----------------------------}
-
- If TheCurrSwatch>=Swatch1 Then
- BEGIN
-
- {------------------------------------------------------}
- { Nope. Check to see if "expire100s" have passed since }
- { the swatch1 time. }
- {------------------------------------------------------}
-
- SwatchExpired := ( TheCurrSwatch >= (Swatch1+(Expire100s/100)) )
-
- END
- ELSE
- BEGIN
-
- {------------------------------------------------------}
- { Yep. Calculate the # of 100s that passed yesterday, }
- { and check to see if "expire100s" is greater than }
- { the 100s from yesterday + the 100s so far today. }
- {------------------------------------------------------}
-
- YesterdayDiff := cdt100sinDay - Swatch1;
-
- SwatchExpired := ( (YesterdayDiff+TheCurrSwatch) >= (Expire100s/100) );
-
- END; { if (not past midnight) / else }
-
- END; { function swatchexpired }
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function GetTicksSinceMidnt( Var Days : BYTE ) : LONGINT;
-
- [PARAMETERS]
-
- Days VAR Returned ?
-
- [RETURNS]
-
- [DESCRIPTION]
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function GetTicksSinceMidnt( Var Days : BYTE ) : LONGINT;
-
- {$IFNDEF OS2}
-
- Assembler;
- ASM
-
- LES DI, [Days]
-
- MOV AH, $00
- INT $1A
-
- JC @@1 {Carry Flag = Error}
-
- MOV byte PTR ES:SI, AL {No Error = Store Function Results}
- MOV AX, DX
- MOV DX, CX
- JMP @@2
-
- @@1:
- MOV byte PTR ES:SI, 0 {Error = Zero Out Function Result}
- XOR AX, AX
- XOR DX, DX
-
- @@2:
-
- END; { GetTicksSinceMidnt }
-
- {$ELSE}
-
- BEGIN
-
- Halt( 69 ); {!^!}
-
- END;
-
- {$ENDIF}
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function SetTicksSinceMidnt( Ticks : LONGINT ) : BOOLEAN;
-
- [PARAMETERS]
-
- Ticks ?
-
- [RETURNS]
-
- [DESCRIPTION]
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function SetTicksSinceMidnt( Ticks : LONGINT ) : BOOLEAN;
-
- {$IFNDEF OS2}
-
- Assembler;
- ASM
-
- MOV CX, word PTR [Ticks+2]
- MOV DX, word PTR [Ticks ]
-
- MOV AH, $01
- INT $1A
-
- MOV AL, 1 { Default = No Error }
- JNC @NoErr
-
- XOR AL, AL { Error = Carry Flag Set }
-
- @NoErr:
-
- END; { SetTicksSinceMidnt }
-
- {$ELSE}
-
- BEGIN
-
- Halt( 69 ); {!^!}
-
- END;
-
- {$ENDIF}
-
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function GetSysTime( Var BCDHours : BYTE;
- Var BCDMins : BYTE;
- Var BCDSecs : BYTE;
- Var DSTActive : BOOLEAN ) : BOOLEAN;
-
- [PARAMETERS]
-
- BCDHours VAR Returned ?
- BCDMins VAR Returned ?
- BCDSecs VAR Returned ?
- DSTActive VAR Returned ?
-
- [RETURNS]
-
- [DESCRIPTION]
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function GetSysTime( Var BCDHours : BYTE;
- Var BCDMins : BYTE;
- Var BCDSecs : BYTE;
- Var DSTActive : BOOLEAN ) : BOOLEAN;
-
- {$IFNDEF OS2}
-
- Assembler;
- ASM
-
- PUSH DS
-
- MOV AH, $02
- INT $1A
-
- JNC @@1 { no err }
-
- {THIS IS TEST CODE}
-
- LDS SI, [BCDHours]
- MOV byte PTR [DS:SI], CH
- MOV byte PTR [DS:SI+1], CL
- MOV byte PTR [DS:SI+2], DH
- MOV byte PTR [DS:SI+3], DL
-
- {END OF TEST CODE}
-
- LES DI, [BCDHours]
- LDS SI, [BCDMins ]
-
- MOV byte PTR ES:DI, CH { BCD Hours }
- MOV byte PTR DS:SI, CL { BCD Minutes }
-
- LES DI, [BCDSecs ]
- LDS SI, [DSTActive]
-
- MOV byte PTR ES:DI, DH { BCD Seconds }
- MOV byte PTR DS:SI, DL { Day Light Savings }
-
- JMP @@2
-
- @@1:
- LES DI, [BCDHours]
- LDS SI, [BCDMins ]
-
- MOV byte PTR ES:DI, 0 { BCD Hours }
- MOV byte PTR DS:SI, 0 { BCD Minutes }
-
- LES DI, [BCDSecs ]
- LDS SI, [DSTActive]
-
- MOV byte PTR ES:DI, 0 { BCD Seconds }
- MOV byte PTR DS:SI, 0 { Day Light Savings }
-
- @@2:
-
- END; { GetSysTime }
-
- {$ELSE}
-
- BEGIN
-
- Halt( 69 ); {!^!}
-
- END;
-
- {$ENDIF}
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function SetSysTime( BCDHours : BYTE;
- BCDMins : BYTE;
- BCDSecs : BYTE;
- DSTActive : BOOLEAN ) : BOOLEAN;
-
- [PARAMETERS]
-
- BCDHours ?
- BCDMins ?
- BCDSecs ?
- DSTActive ?
-
- [RETURNS]
-
- [DESCRIPTION]
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function SetSysTime( BCDHours : BYTE;
- BCDMins : BYTE;
- BCDSecs : BYTE;
- DSTActive : BOOLEAN ) : BOOLEAN;
-
- {$IFNDEF OS2}
-
- Assembler;
- ASM
-
- MOV CH, BCDHours
- MOV CL, BCDMins
- MOV DH, BCDSecs
- MOV DL, DSTActive
-
- MOV AH, $03
- INT $1A
-
- MOV AL, 1 { Default = No Error }
- JNC @@1
-
- XOR AL, AL { Error = CFlag }
-
- @@1:
-
- END; { SetSysTime }
-
- {$ELSE}
-
- BEGIN
-
- Halt( 69 ); {!^!}
-
- END;
-
- {$ENDIF}
-
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function GetSysDate( Var BCDDay : BYTE;
- Var BCDMon : BYTE;
- Var BCDYear : BYTE;
- Var BCDCent : BYTE ) : BOOLEAN;
-
- [PARAMETERS]
-
- BCDDay VAR Returned ?
- BCDMon VAR Returned ?
- BCDYear VAR Returned ?
- BCDCent VAR Returned ?
-
- [RETURNS]
-
- [DESCRIPTION]
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function GetSysDate( Var BCDDay : BYTE;
- Var BCDMon : BYTE;
- Var BCDYear : BYTE;
- Var BCDCent : BYTE ) : BOOLEAN;
- {$IFNDEF OS2}
-
- Assembler;
- ASM
-
- PUSH DS
-
- MOV AH, $04
- INT $1A
-
- JNC @@1 { no err }
-
- LES DI, [BCDDay ]
- LDS SI, [BCDMon ]
- MOV byte PTR ES:DI, DL { BCD Day }
- MOV byte PTR DS:SI, DH { BCD Month }
-
- LES DI, [BCDYear]
- LDS SI, [BCDCent]
- MOV byte PTR ES:DI, CL { BCD Year }
- MOV byte PTR DS:SI, CH { Day Century }
-
- JMP @@2
-
- @@1:
- LES DI, [BCDDay ]
- LDS SI, [BCDMon ]
- MOV byte PTR ES:DI, 0 { BCD Day }
- MOV byte PTR DS:SI, 0 { BCD Month }
-
- LES DI, [BCDYear]
- LDS SI, [BCDCent]
- MOV byte PTR ES:DI, 0 { BCD Year }
- MOV byte PTR DS:SI, 0 { Day Century }
-
- @@2:
-
- END; { GetSysDate }
-
- {$ELSE}
-
- BEGIN
-
- Halt( 69 ); {!^!}
-
- END;
-
- {$ENDIF}
-
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function SetSysDate( BCDDay : BYTE;
- BCDMon : BYTE;
- BCDYear : BYTE;
- BCDCent : BYTE ) : BOOLEAN;
-
- [PARAMETERS]
-
- BCDDay ?
- BCDMon ?
- BCDYear ?
- BCDCent ?
-
- [RETURNS]
-
- [DESCRIPTION]
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function SetSysDate( BCDDay : BYTE;
- BCDMon : BYTE;
- BCDYear : BYTE;
- BCDCent : BYTE ) : BOOLEAN;
- {$IFNDEF OS2}
-
- Assembler;
- ASM
-
- MOV DL, BCDDay
- MOV DH, BCDMon
- MOV CL, BCDYear
- MOV CH, BCDCent
-
- MOV AH, $05
- INT $1A
-
- MOV AL, 1 { Default = No Error }
- JNC @@1
-
- XOR AL, AL { Error = CFlag }
-
- @@1:
-
- END; { SetSysDate }
-
- {$ELSE}
-
- BEGIN
-
- Halt( 69 ); {!^!}
-
- END;
-
- {$ENDIF}
-
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function SetSysAlarmOn( BCDHours : BYTE;
- BCDMins : BYTE;
- BCDSecs : BYTE ) : BOOLEAN;
- [PARAMETERS]
-
- BCDHours Alarm Hours in BCD Format
- BCDMins Alarm Minutes in BCD Format
- BCDSecs Alarm Seconds in BCD Format
-
- [RETURNS]
-
- Whether the Alarm was set to the provided Time (TRUE=Alarm Set)
-
- [DESCRIPTION]
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function SetSysAlarmOn( BCDHours : BYTE;
- BCDMins : BYTE;
- BCDSecs : BYTE ) : BOOLEAN;
- {$IFNDEF OS2}
-
- Assembler;
- ASM
-
- MOV CH, BCDHours
- MOV CL, BCDMins
- MOV DH, BCDSecs
-
- MOV AH, $06
- INT $1A
-
- MOV AL, 1 { Default = No Error }
- JNC @@1
-
- XOR AL, AL { Error = CFlag, if Alarm PreSet or NoClock }
-
- @@1:
-
- END; { SetSysAlarmOn }
-
- {$ELSE}
-
- BEGIN
-
- Halt( 69 ); {!^!}
-
- END;
-
- {$ENDIF}
-
- {────────────────────────────────────────────────────────────────────────────}
-
- (*-
-
- [FUNCTION]
-
- Function SetSysAlarmOff : BOOLEAN;
-
- [PARAMETERS]
-
- (None)
-
- [RETURNS]
-
- Whether the System Alarm is Off (TRUE=Off)
-
- [DESCRIPTION]
-
- [SEE-ALSO]
-
- [EXAMPLE]
-
- -*)
-
- Function SetSysAlarmOff : BOOLEAN;
-
-
- {$IFNDEF OS2}
-
- Assembler;
- ASM
-
- MOV AH, $07
- INT $1A
-
- MOV AL, 1 { Default = No Error }
- JNC @@1
-
- XOR AL, AL { Error = CFlag }
-
- @@1:
-
- END; { SetSysAlarmOff }
-
- {$ELSE}
-
- BEGIN
-
- Halt( 69 ); {!^!}
-
- END;
-
- {$ENDIF}
-
- Procedure Sleep( Sleep100s : LONGINT );
-
- Var
-
- Sw : TSwatch;
-
- BEGIN
-
- Sw := CurrSwatch;
-
- While Not SwatchExpired( Sw, Sleep100s ) Do;
-
- END;
-
-
- {────────────────────────────────────────────────────────────────────────────}
- {────────────────────────────────────────────────────────────────────────────}
- {────────────────────────────────────────────────────────────────────────────}
-
- BEGIN
- END.
-
-
- TPackedDT information:
- ======================
-
- 1 LONGINT = 2 WORD
- (DATE) yyyyyyymmmmddddd =
-
- [(Year - 1980) * 512] + (Month * 32) + Day
-
- (TIME) hhhhhmmmmmmsssss =
-
- (Hour SHL 10) + (Min SHL 5) + (Sec DIV 2)
-
-