1 /*
2 * date.c -- date & time manage
3 *
4 * Copyright (C) 1989,1997,1999,2003 by Yoshifumi Mori
5 *
6 * tab:4
7 */
8
9 #include "cdefs.h"
10 #include "extern.h"
11
12 int date_12_flag = TRUE;
13 int date_28_flag = TRUE;
14 int date_eto_flag = TRUE;
15 int date_eto2_flag = FALSE;
16 int date_kyureki_flag = TRUE;
17 int date_kyusei_flag = TRUE;
18 int date_time_flag = TRUE;
19 int date_time_inhibit = FALSE;
20 int date_timesystem_type = DATE_TIMESYSTEM_24H;
21 int date_yeartype = DATE_YEAR_AD;
22
23 /*
24 * tide name & state table
25 */
26 static const char *tide_name[5] = {
27 "��Ĭ", "��Ĭ", "��Ĭ", "ĹĬ", "��Ĭ",
28 };
29 static const char tide_state[30] = {
30 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, /* 1 - 10 */
31 4, 1, 1, 0, 0, 0, 0, 1, 1, 1, /* 11 - 20 */
32 1, 2, 2, 2, 3, 4, 1, 1, 0, 0, /* 21 - 30 */
33 };
34
35 static void date_make_year(int year, int month, int day);
36 static void date_make_timesystem(void);
37
38 /*
39 * ���ա���������١�������ɽ��
40 */
date(void)41 void date(void)
42 {
43 const char *defSuffix;
44 const struct kansi_t *k;
45 const struct kansi_name_t *kansiname;
46 const struct kyusei_t *kyuseiname;
47 const char *p;
48
49 pager_output_skip();
50
51 defSuffix = GetDefaultSuffix(0);
52
53 pager_output("%s", GetTimemessage(calendar.hour));
54
55 /* ���ա����� */
56 strcpy(msgbuf, "���礦�ϡ�");
57 date_make_year(calendar.year, calendar.month, calendar.day);
58 sprintf(strlastp(msgbuf), "%2d��%2d�� (%s) ", calendar.month, calendar.day, GetNameofWhatday(LANG_J, calendar.dayofweek));
59 if (date_time_flag == TRUE && date_time_inhibit == FALSE) {
60 strcat(msgbuf, "����ϡ�");
61 date_make_timesystem();
62 }
63 strcat(msgbuf, defSuffix);
64 strcat(msgbuf, MSG_PERIOD);
65 pager_output(msgbuf);
66
67 /* ����(������) */
68 if (date_kyureki_flag == TRUE && calendar.lc_valid == TRUE) {
69 #if 0
70 strcpy(msgbuf, "������ǡ�");
71 #else
72 strcpy(msgbuf, "����Ǥϡ�");
73 #endif
74 date_make_year(calendar.lc_year, calendar.lc_month, calendar.lc_day);
75 if (calendar.lc_leap != 0) {
76 strcat(msgbuf, "��");
77 }
78 sprintf(strlastp(msgbuf), "%2d��%2d�� (%s) [%s] %s" MSG_PERIOD,
79 calendar.lc_month, calendar.lc_day, calendar.lc_rokuyou,
80 tide_name[(int)tide_state[calendar.lc_day - 1]], defSuffix);
81 pager_output(msgbuf);
82 }
83
84 /* ���� */
85 if (date_eto_flag == TRUE) {
86 k = kansi(calendar.year, calendar.month, calendar.julian_day);
87 kansiname = kansi_name(k);
88 if (date_eto2_flag == FALSE) {
89 pager_output("���٤Ǥϡ�%s (%s) ��ǯ��%s (%s) ����%s" MSG_PERIOD,
90 kansiname->yy1, kansiname->yy2, kansiname->dd1, kansiname->dd2, defSuffix);
91 } else {
92 pager_output("���٤Ǥϡ�%s (%s) ��ǯ��%s (%s) �η%s (%s) ����%s" MSG_PERIOD,
93 kansiname->yy1, kansiname->yy2, kansiname->mm1, kansiname->mm2,
94 kansiname->dd1, kansiname->dd2, defSuffix);
95 }
96 }
97
98 /* ���� */
99 if (date_kyusei_flag == TRUE) {
100 kyuseiname = kyusei(calendar.year, calendar.julian_day);
101 #if 1
102 pager_output("�����ϡ�%s %s" MSG_PERIOD, kyuseiname->kyusei, defSuffix);
103 #else
104 pager_output("�������ǡ�%s %s" MSG_PERIOD, kyuseiname->kyusei, defSuffix);
105 #endif
106 }
107
108 /* ����ľ */
109 if (date_12_flag == TRUE) {
110 p = calc_12choku(calendar.year, calendar.month, calendar.day, calendar.julian_day);
111 if (p != NULL) {
112 pager_output("����ľ�ϡ�%s %s" MSG_PERIOD, p, defSuffix);
113 }
114 }
115
116 /* ��Ȭ�� */
117 if (date_28_flag == TRUE) {
118 p = calc_28syuku(calendar.julian_day);
119 pager_output("��Ȭ�ɤϡ�%s %s" MSG_PERIOD, p, defSuffix);
120 }
121 }
122
123 /*
124 * ����/�����ǯ��ɽ��(���ܸ�)
125 */
126 static
date_make_year(int year,int month,int day)127 void date_make_year(int year, int month, int day)
128 {
129 const char *nameofera;
130
131 switch (date_yeartype) {
132 case DATE_YEAR_AD: /* ���� */
133 sprintf(strlastp(msgbuf), "%d", year);
134 break;
135 case DATE_YEAR_JC: /* ���� */
136 nameofera = GetNameofEra(LANG_J, year, month, day, &year);
137 if (nameofera == NULL) {
138 nameofera = "????";
139 }
140 strcat(msgbuf, nameofera);
141 if (year == 1) {
142 strcat(msgbuf, "��");
143 } else {
144 sprintf(strlastp(msgbuf), "%2d", year);
145 }
146 break;
147 }
148 strcat(msgbuf, "ǯ");
149 }
150
151 #define SET_AM 0 /* ���� */
152 #define SET_PM 1 /* ��� */
153
154 /*
155 * 12������/24�������ǻ����ɽ��(���ܸ�)
156 */
157 static
date_make_timesystem(void)158 void date_make_timesystem(void)
159 {
160 static const char *ampm_name[2] = { "����", "���" };
161 int ampm_flag = SET_AM; /* SET_AM:����(a.m.), SET_PM:���(p.m.) */
162 int hour;
163
164 hour = calendar.hour;
165 if (date_timesystem_type == DATE_TIMESYSTEM_12H) {
166 if (hour >= 12) {
167 ampm_flag = SET_PM;
168 hour -= 12;
169 }
170 }
171
172 if (date_timesystem_type == DATE_TIMESYSTEM_12H) {
173 strcat(msgbuf, ampm_name[ampm_flag]);
174 }
175 sprintf(strlastp(msgbuf), "%2d��%02dʬ", hour, calendar.minute);
176 }
177