blob: a0c8f610c7dea52f84f0f7e3a2dd921aa474842c (
plain)
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
83
84
85
86
87
88
89
90
|
/*
* caltontp - convert a julian date to an NTP time
*/
#include <sys/types.h>
#include "ntp_types.h"
#include "ntp_calendar.h"
#include "ntp_stdlib.h"
/*
* calmonthtab - month start offsets from the beginning of a cycle.
*/
static u_short calmonthtab[12] = {
0, /* March */
MAR, /* April */
(MAR+APR), /* May */
(MAR+APR+MAY), /* June */
(MAR+APR+MAY+JUN), /* July */
(MAR+APR+MAY+JUN+JUL), /* August */
(MAR+APR+MAY+JUN+JUL+AUG), /* September */
(MAR+APR+MAY+JUN+JUL+AUG+SEP), /* October */
(MAR+APR+MAY+JUN+JUL+AUG+SEP+OCT), /* November */
(MAR+APR+MAY+JUN+JUL+AUG+SEP+OCT+NOV), /* December */
(MAR+APR+MAY+JUN+JUL+AUG+SEP+OCT+NOV+DEC), /* January */
(MAR+APR+MAY+JUN+JUL+AUG+SEP+OCT+NOV+DEC+JAN), /* February */
};
u_long
caltontp(jt)
register const struct calendar *jt;
{
register int cyear;
register int resyear;
register u_long nt;
register int yearday;
/*
* Find the start of the cycle this is in.
*/
cyear = (int)(jt->year - 1900) >> 2;
resyear = (jt->year - 1900) - (cyear << 2);
yearday = 0;
if (resyear == 0) {
if (jt->yearday == 0) {
if (jt->month == 1 || jt->month == 2) {
cyear--;
resyear = 3;
}
} else {
if (jt->yearday <= (u_short)(JAN+FEBLEAP)) {
cyear--;
resyear = 3;
yearday = calmonthtab[10] + jt->yearday;
} else {
yearday = jt->yearday - (JAN+FEBLEAP);
}
}
} else {
if (jt->yearday == 0) {
if (jt->month == 1 || jt->month == 2)
resyear--;
} else {
if (jt->yearday <= (u_short)(JAN+FEB)) {
resyear--;
yearday = calmonthtab[10] + jt->yearday;
} else {
yearday = jt->yearday - (JAN+FEB);
}
}
}
if (yearday == 0) {
if (jt->month >= 3) {
yearday = calmonthtab[jt->month - 3] + jt->monthday;
} else {
yearday = calmonthtab[jt->month + 9] + jt->monthday;
}
}
nt = TIMESDPERC((u_long)cyear);
while (resyear-- > 0)
nt += DAYSPERYEAR;
nt += (u_long) (yearday - 1);
nt = TIMES24(nt) + (u_long)jt->hour;
nt = TIMES60(nt) + (u_long)jt->minute;
nt = TIMES60(nt) + (u_long)jt->second;
return nt + MAR1900;
}
|