-
Notifications
You must be signed in to change notification settings - Fork 1
/
TIMESTMP.PAS
82 lines (54 loc) · 1.96 KB
/
TIMESTMP.PAS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
{ TIMESTMP.PAS
Description:
A short & sweet collection of routines for getting and testing a
unique timestamp.
}
unit timestmp;
interface
uses Dos;
type
timestamp_type = longint;
{ Global Variables }
var
GTimeStamp : timestamp_type;
procedure get_time_stamp(var tstamp : timestamp_type);
implementation
{ get_time_stamp
Description:
Creates a compressed long integer that contains all the necessary
time information. There are enough bits in a 32-bit word to do this:
Variable Range Bits
-------- ----- ----
Year 0-63 6
Month 1-12 4
Day 0-31 5
Hour 0-23 5
Minute 0-59 6
Second 0-59 6
Note that Year does not quite fit comfortably into this scheme. The
actual returned value is 1980-2099, a span of 119 years; but we are using
only 63. Year 0 is considered 1992 and the upper limit is 2055 before it
goes back to year 0 (1992) again.
The DayOfWeek information is thrown away because it is redundant, and
the Sec100 information is thrown away because it is unnecessarily precise.
}
procedure get_time_stamp(var tstamp : timestamp_type);
var
Year, Month, Day, DayOfWeek : word;
Hour, Minute, Second, Sec100 : word;
temp : timestamp_type;
begin
GetDate(Year, Month, Day, DayOfWeek);
GetTime(Hour, Minute, Second, Sec100);
{ Normalize the year }
tstamp := (Year - 1992) mod 64;
tstamp := tstamp SHL 26;
temp := Month;
tstamp := tstamp OR (temp SHL 22);
temp := Day;
tstamp := tstamp OR (temp SHL 17);
temp := Hour;
tstamp := tstamp OR (temp SHL 12) OR (Minute SHL 6) OR Second
end; { get_time_stamp }
end. { timestmp }