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