1 /*
2  * propshet.c -- TODAY for Windows - Property Sheet Control
3  *
4  * Copyright (C) 1997,1998,1999,2003 by Yoshifumi Mori
5  *
6  * tab:4
7  */
8 
9 #include "cdefs.h"
10 #include "extern.h"
11 #include "todayfw.rh"
12 
13 #define MAX_SHEET	11
14 #define MAXLIST(x)	(sizeof(x) / sizeof(char *))
15 
16 struct LEVEL_LIST {
17 	int	level;
18 	const char	*string;
19 };
20 
21 struct PROP_TAB_TBL {
22 	int		iResID;
23 	DLGPROC	DlgProc;
24 };
25 
26 static const DWORD	propHelpID[] = {
27 // DISPLAY
28 	IDC_DISP_CHK_DATE,		1101,
29 	IDC_DISP_CHK_BIRTHDAY,	1102,
30 	IDC_DISP_CHK_DEATHDAY,	1112,	/* add */
31 	IDC_DISP_CHK_EVENT,		1103,
32 	IDC_DISP_CHK_HISTORY,	1104,
33 	IDC_DISP_CHK_SCHEDULE,	1105,
34 	IDC_DISP_ORDER_EDIT1,	1106,
35 	IDC_DISP_ORDER_EDIT2,	1107,
36 	IDC_DISP_ORDER_EDIT3,	1108,
37 	IDC_DISP_ORDER_EDIT4,	1109,
38 	IDC_DISP_ORDER_EDIT5,	1110,
39 	IDC_DISP_ORDER_PREVIEW,	1111,
40 // DATE
41 	IDC_DATE_RBTN_DATE1,	1201,
42 	IDC_DATE_RBTN_DATE2,	1202,
43 	IDC_DATE_RBTN_TIME1,	1204,
44 	IDC_DATE_RBTN_TIME2,	1205,
45 	IDC_DATE_CHK_KYUREKI,	1206,
46 	IDC_DATE_CHK_ETO1,		1207,
47 	IDC_DATE_CHK_ETO2,		1208,
48 	IDC_DATE_CHK_9SEI,		1209,
49 	IDC_DATE_CHK_12CHOKU,	1210,
50 	IDC_DATE_CHK_28SYUKU,	1211,
51 // BIRTHDAY
52 	IDC_BIRTH_CBBOX_NOTICE,	1301,
53 	IDC_BIRTH_EDIT_NOTICE,	1302,
54 	IDC_BIRTH_CBBOX_AGE,	1303,
55 	IDC_BIRTH_CBBOX_AGESORT,1304,
56 	IDC_BIRTH_CBBOX_SORT,	1305,
57 	IDC_BIRTH_EDIT_FILE,	1307,
58 	IDC_BIRTH_FLOWER,		1308,
59 	IDC_BIRTH_ADDINFO,		1309,	/* add */
60 	IDC_DEATH_CBBOX_NOTICE,	1310,	/* add */
61 	IDC_DEATH_EDIT_NOTICE,	1311,	/* add */
62 	IDC_DEATH_CBBOX_AGE,	1312,	/* add */
63 // EVENT
64 	IDC_EVENT_CBBOX_NOTICE,	1401,
65 	IDC_EVENT_EDIT_NOTICE,	1402,
66 	IDC_EVENT_CHK_RANGE,	1403,
67 	IDC_EVENT_CBBOX_SORT,	1404,
68 	IDC_EVENT_EDIT_FILE1,	1406,
69 	IDC_EVENT_EDIT_FILE2,	1408,
70 // EVENT LEVEL
71 	IDC_LEVEL_EDIT_00,		1502,
72 	IDC_LEVEL_EDIT_01,		1504,
73 	IDC_LEVEL_EDIT_02,		1506,
74 	IDC_LEVEL_EDIT_03,		1508,
75 	IDC_LEVEL_EDIT_04,		1510,
76 	IDC_LEVEL_EDIT_05,		1512,
77 	IDC_LEVEL_EDIT_06,		1514,
78 	IDC_LEVEL_EDIT_07,		1516,
79 	IDC_LEVEL_EDIT_08,		1518,
80 	IDC_LEVEL_EDIT_09,		1520,
81 	IDC_LEVEL_EDIT_10,		1522,
82 	IDC_LEVEL_EDIT_11,		1524,
83 	IDC_LEVEL_EDIT_12,		1526,
84 	IDC_LEVEL_EDIT_13,		1528,
85 	IDC_LEVEL_EDIT_14,		1530,
86 	IDC_LEVEL_EDIT_15,		1532,
87 	IDC_LEVEL_EDIT_16,		1534,
88 	IDC_LEVEL_EDIT_17,		1536,
89 	IDC_LEVEL_EDIT_18,		1538,
90 	IDC_LEVEL_EDIT_19,		1540,
91 	IDC_LEVEL_EDIT_20,		1542,
92 	IDC_LEVEL_EDIT_21,		1544,
93 	IDC_LEVEL_EDIT_22,		1546,
94 	IDC_LEVEL_EDIT_23,		1548,
95 	IDC_LEVEL_EDIT_24,		1550,
96 	IDC_LEVEL_EDIT_25,		1552,
97 	IDC_LEVEL_LIST,			1553,
98 // HISTORY
99 	IDC_HIST_CBBOX_YEARCOM,	1601,	/* change */
100 	IDC_HIST_CBBOX_ADDINFO,	1602,	/* change */
101 	IDC_HIST_CHK_BOTH_DATE,	1603,	/* change */
102 	IDC_HIST_CBBOX_MSGTYPE,	1604,
103 	IDC_HIST_TEXT_PREVIEW,	1605,
104 	IDC_HIST_CBBOX_SORT,	1606,
105 	IDC_HIST_EDIT_FILE,		1608,
106 // SCHEDULE
107 	IDC_SCHE_EDIT_NOTICE,	1701,
108 	IDC_SCHE_CBBOX_MSGTYPE,	1702,
109 	IDC_SCHE_TEXT_PREVIEW,	1703,
110 	IDC_SCHE_EDIT_FILE,		1705,
111 // SCREEN
112 	IDC_SCRN_EDIT_W,		1801,
113 	IDC_SCRN_EDIT_H,		1802,
114 	IDC_SCRN_EDIT_C01,		1803,
115 	IDC_SCRN_EDIT_C02,		1804,
116 	IDC_SCRN_PREVIEW,		1805,
117 	IDC_SCRN_DRAW_S00,		1806,
118 	IDC_SCRN_DRAW_S01,		1806,
119 	IDC_SCRN_DRAW_S02,		1806,
120 	IDC_SCRN_DRAW_S03,		1806,
121 	IDC_SCRN_DRAW_S04,		1806,
122 	IDC_SCRN_DRAW_S05,		1806,
123 	IDC_SCRN_DRAW_S06,		1806,
124 	IDC_SCRN_DRAW_S07,		1806,
125 	IDC_SCRN_DRAW_S08,		1806,
126 	IDC_SCRN_DRAW_S09,		1806,
127 	IDC_SCRN_DRAW_S10,		1806,
128 	IDC_SCRN_DRAW_S11,		1806,
129 	IDC_SCRN_DRAW_S12,		1806,
130 	IDC_SCRN_DRAW_S13,		1806,
131 	IDC_SCRN_DRAW_S14,		1806,
132 	IDC_SCRN_DRAW_S15,		1806,
133 	IDC_SCRN_DRAW_01,		1807,	/* add */
134 	IDC_SCRN_DRAW_02,		1808,	/* add */
135 	IDC_SCRN_FONTLIST,		1810,	/* add */
136 	IDC_SCRN_FONTSIZE,		1811,	/* add */
137 // FILE
138 	IDC_FILE_CHK_FKEEP,		1901,
139 	IDC_FILE_EDIT_FPATH,	1902,
140 	IDC_FILE_EDIT_FNAME,	1904,
141 	IDC_FILE_EDIT_SUFFIX,	1906,
142 	IDC_FILE_EDIT_TABLE,	1907,
143 // EVENT REKICHU
144 	IDC_REKICHU_0001,		2001,
145 	IDC_REKICHU_0002,		2002,
146 	IDC_REKICHU_0003,		2003,
147 	IDC_REKICHU_0004,		2004,
148 	IDC_REKICHU_0005,		2005,
149 	IDC_REKICHU_0006,		2006,
150 	IDC_REKICHU_0007,		2007,
151 	IDC_REKICHU_0008,		2008,
152 	IDC_REKICHU_0009,		2009,
153 	IDC_REKICHU_0010,		2010,
154 	IDC_REKICHU_0011,		2011,
155 	IDC_REKICHU_0012,		2012,
156 	IDC_REKICHU_0013,		2013,
157 	IDC_REKICHU_0014,		2014,
158 	IDC_REKICHU_0015,		2015,
159 	IDC_REKICHU_0016,		2016,
160 	IDC_REKICHU_0017,		2017,
161 	IDC_REKICHU_0018,		2018,
162 	IDC_REKICHU_0019,		2019,
163 	IDC_REKICHU_0020,		2020,
164 // EVENT REKICHU KADAN
165 	IDC_KADAN_0001,			2101,
166 	IDC_KADAN_0002,			2102,
167 	IDC_KADAN_0003,			2103,
168 	IDC_KADAN_0004,			2104,
169 	IDC_KADAN_0005,			2105,
170 	IDC_KADAN_0006,			2106,
171 	IDC_KADAN_0007,			2107,
172 	IDC_KADAN_0008,			2108,
173 	IDC_KADAN_0009,			2109,
174 	IDC_KADAN_0010,			2110,
175 	IDC_KADAN_0011,			2111,
176 	IDC_KADAN_0012,			2112,
177 	IDC_KADAN_0013,			2113,
178 	IDC_KADAN_0014,			2114,
179 	IDC_KADAN_0015,			2115,
180 	IDC_KADAN_0016,			2116,
181 	IDC_KADAN_0017,			2117,
182 	IDC_KADAN_0018,			2118,
183 	IDC_KADAN_0019,			2119,
184 	IDC_KADAN_0020,			2120,
185 	IDC_KADAN_0021,			2121,
186 	IDC_KADAN_0022,			2122,
187 //
188 	0,						0
189 };
190 
191 static const char	*list_notice[3] = {
192 	"ͽ���ʤ�", "����ͽ��", "'+'�Τ�ͽ��"
193 };
194 static const char	*list_age[4] = {
195 	"����ɽ��", "�����Τ�", "����24�аʲ�", "ɽ�����ʤ�"
196 };
197 static const char	*list_death_age[4] = {
198 	"ɽ�����ʤ�", "�׸�ǯ�Τ�", "��ǯ�Τ�", "ξ��ɽ��"
199 };
200 static const char	*list_hist_year[4] = {
201 	"ɽ�����ʤ�", "����Τ�", "��ǯ�Τ�", "ξ��ɽ��"
202 };
203 static const char	*list_addinfo[4] = {
204 	"ɽ�����ʤ�", "�������Τ�", "̿���Τ�", "ξ��ɽ��"
205 };
206 static const char	*list_sort[3] = {
207 	"����", "�߽�", "���ʤ�"
208 };
209 static const char	*list_type[4] = {
210 	"Type0", "Type1", "Type2", "Type3"
211 };
212 static const char	*list_order[6] = {
213 	"����_����_����", "����_����_����",
214 	"����_����_����", "����_����_����",
215 	"����_����_����", "����_����_����",
216 };
217 static const char	*msg_preview1[4] = {
218 	"  yyyy/mm/dd �����ͤ���˥ǡ�����ɽ�����ޤ�",
219 	"  yyyy/mm/dd  �����ͤ���˥ǡ���\r\n            ���ޤ��֤�ɽ�����ޤ�",
220 	"  yyyy/mm/dd  �����ͤ���˥ǡ���\r\n              ���ޤ��֤�ɽ������",
221 	"  yyyy/mm/dd    �����ͤ���˥ǡ�\r\n              �����ޤ��֤�ɽ����",
222 };
223 static const char	*msg_preview2[4] = {
224 	"commentfield �����ͤ˥�å�������ɽ�����ޤ�",
225 	"commentfield  �����ͤ˥�å�����\r\n            ���ޤ��֤�ɽ�����ޤ�",
226 	"commentfield  �����ͤ˥�å�����\r\n              ���ޤ��֤�ɽ������",
227 	"commentfield    �����ͤ˥�å���\r\n              �����ޤ��֤�ɽ����",
228 };
229 #ifdef MSG_STYLE
230 #define MSG_PREVIEW_TEXT	"����ˤ��ϡ�\n���礦�ϡ�ʿ��15ǯ 4��19�� (������) ����ϡ�\n����Ǥϡ�ʿ��15ǯ 3��18�� (ͧ��) [��Ĭ] ��\n���٤Ǥϡ��̤ (�ߤ��ΤȤҤĤ�) ��ǯ������\n�����ϡ���� �Ǥ���\n����ľ�ϡ��� �Ǥ���\n��Ȭ�ɤϡ��� �Ǥ���"
231 #else
232 #define MSG_PREVIEW_TEXT	"����ˤ���.\n���礦�ϡ�ʿ��15ǯ 4��19�� (������) ����ϡ�\n����Ǥϡ�ʿ��15ǯ 3��18�� (ͧ��) [��Ĭ] ��\n���٤Ǥϡ��̤ (�ߤ��ΤȤҤĤ�) ��ǯ������\n�����ϡ���� �Ǥ�.\n����ľ�ϡ��� �Ǥ�.\n��Ȭ�ɤϡ��� �Ǥ�."
233 #endif
234 #define TEXT_SYSFONTNAME	"TODAY Default"
235 
236 static HINSTANCE	ghInstance;
237 static HFONT	hfontPreview;
238 static BOOL	bChange;
239 static BOOL	bRekichu_Kadan;
240 static BOOL	bChangeDisplayParam;
241 static char	szText[32];
242 static char	msg[256];
243 static struct LEVEL_LIST	*levellist;
244 
245 static
setDropListInt(HWND hDlg,UINT ctrlID,const char ** list,int maxn,int pos)246 void setDropListInt(HWND hDlg, UINT ctrlID, const char **list, int maxn, int pos)
247 {
248 	int	i;
249 
250 	for (i = 0; i < maxn; i++) {
251 		SendDlgItemMessage(hDlg, ctrlID, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)list[i]);
252 	}
253 	SendDlgItemMessage(hDlg, ctrlID, CB_SETCURSEL, pos, TRUE);
254 }
255 
256 static
setDropListText(HWND hDlg,UINT ctrlID,const char ** list,int maxn,char * text)257 void setDropListText(HWND hDlg, UINT ctrlID, const char **list, int maxn, char *text)
258 {
259 	int	i;
260 
261 	for (i = 0; i < maxn; i++) {
262 		SendDlgItemMessage(hDlg, ctrlID, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)list[i]);
263 	}
264 	if (text == NULL) {
265 		text = "";
266 	}
267 	SetDlgItemText(hDlg, ctrlID, (LPCTSTR)text);
268 }
269 
270 static
setFileList(HWND hDlg,UINT ctrlID,char ** filetbl,int maxtbl)271 void setFileList(HWND hDlg, UINT ctrlID, char **filetbl, int maxtbl)
272 {
273 	int		i;
274 	int		textlen;
275 	char	*bufp;
276 	char	*p;
277 
278 	textlen = 0;
279 	for (i = 0; i < maxtbl; i++) {
280 		if (filetbl[i] != NULL && *(filetbl[i]) != '\0') {
281 			textlen += strlen(filetbl[i]) + 2;
282 		}
283 	}
284 	textlen++;
285 	bufp = malloc(textlen);
286 	if (bufp != NULL) {
287 		p = bufp;
288 		for (i = 0; i < maxtbl; i++) {
289 			if (filetbl[i] != NULL && *(filetbl[i]) != '\0') {
290 				sprintf(p, "%s\r\n", filetbl[i]);
291 				p = strchr(p, '\0');
292 			}
293 		}
294 		*p = '\0';
295 		SetDlgItemText(hDlg, ctrlID, (LPCTSTR)bufp);
296 		free(bufp);
297 	}
298 }
299 
300 static
setEditText(HWND hDlg,UINT ctrlID,char * text)301 void setEditText(HWND hDlg, UINT ctrlID, char *text)
302 {
303 	if (text == NULL) {
304 		text = "";
305 	}
306 	SetDlgItemText(hDlg, ctrlID, (LPCTSTR)text);
307 }
308 
309 static
updateCheckButton(HWND hDlg,UINT ctrlID,int * flag)310 void updateCheckButton(HWND hDlg, UINT ctrlID, int *flag)
311 {
312 	int	state;
313 
314 	state = IsDlgButtonChecked(hDlg, ctrlID);
315 	if (*flag != state) {
316 		*flag = state;
317 		bChange = TRUE;
318 	}
319 }
320 
321 static
updateCheckDropListInt(HWND hDlg,UINT ctrlID,int * ip)322 void updateCheckDropListInt(HWND hDlg, UINT ctrlID, int *ip)
323 {
324 	int	state;
325 
326 	state = SendDlgItemMessage(hDlg, ctrlID, CB_GETCURSEL, 0, 0L);
327 	if (state != CB_ERR && *ip != state) {
328 		*ip = state;
329 		bChange = TRUE;
330 	}
331 }
332 
333 static
updateCheckEditInt(HWND hDlg,UINT ctrlID,int * ip)334 void updateCheckEditInt(HWND hDlg, UINT ctrlID, int *ip)
335 {
336 	int		x;
337 	BOOL	bFlag;
338 
339 	x = GetDlgItemInt(hDlg, ctrlID, &bFlag, TRUE);
340 	if (bFlag == TRUE && *ip != x) {
341 		*ip = x;
342 		bChange = TRUE;
343 	}
344 }
345 
346 static
updateCheckEditText(HWND hDlg,UINT ctrlID,char ** bufp)347 void updateCheckEditText(HWND hDlg, UINT ctrlID, char **bufp)
348 {
349 	int		textlen;
350 	char	*text;
351 
352 	textlen = SendDlgItemMessage(hDlg, ctrlID, WM_GETTEXTLENGTH, 0, 0L) + 1;
353 	text = malloc(textlen);
354 	if (text != NULL) {
355 		SendDlgItemMessage(hDlg, ctrlID, WM_GETTEXT, textlen, (LPARAM)text);
356 		(void)strtok(text, "\r\n");	/* cut CR/LF */
357 		if (strlen(text) == 0) {	/* edit text is empty */
358 			if (*bufp != NULL) {
359 				free(*bufp);
360 				bChange = TRUE;
361 			}
362 			*bufp = NULL;
363 		} else if (*bufp == NULL || strcmp(*bufp, text) != 0) {
364 			if (*bufp != NULL) {
365 				free(*bufp);
366 			}
367 			*bufp = xstrdup(text);
368 			bChange = TRUE;
369 		}
370 		free(text);
371 	}
372 }
373 
374 static
updateCheckEditTextList(HWND hDlg,UINT ctrlID,char ** listp,int listcnt)375 void updateCheckEditTextList(HWND hDlg, UINT ctrlID, char **listp, int listcnt)
376 {
377 	int		i;
378 	int		cnt;
379 	int		textlen;
380 	char	*text;
381 	char	**bufp;
382 	char	*p;
383 	char	*lasts;
384 
385 	textlen = SendDlgItemMessage(hDlg, ctrlID, WM_GETTEXTLENGTH, 0, 0L) + 1;
386 	text = malloc(textlen);
387 	if (text != NULL) {
388 		SendDlgItemMessage(hDlg, ctrlID, WM_GETTEXT, textlen, (LPARAM)text);
389 
390 		bufp = malloc(sizeof(char *) * listcnt);
391 		if (bufp != NULL) {
392 			memset(bufp, '\0', sizeof(char *) * listcnt);
393 
394 			cnt = 0;
395 			lasts = NULL;
396 			p = strtok_r(text, "\r\n", &lasts);
397 			while (p != NULL) {
398 				bufp[cnt++] = p;
399 				if (cnt >= listcnt) {
400 					break;
401 				}
402 				p = strtok_r(NULL, "\r\n", &lasts);
403 			}
404 
405 			for (i = 0; i < listcnt; i++) {
406 				if (listp[i] == NULL) {
407 					if (bufp[i] != NULL) {
408 						listp[i] = xstrdup(bufp[i]);
409 						bChange = TRUE;
410 					}
411 				} else if (bufp[i] == NULL || strcmp(listp[i], bufp[i]) != 0) {
412 					free(listp[i]);
413 					if (bufp[i] == NULL) {
414 						listp[i] = NULL;
415 					} else {
416 						listp[i] = xstrdup(bufp[i]);
417 					}
418 					bChange = TRUE;
419 				}
420 			}
421 
422 			free(bufp);
423 		}
424 		free(text);
425 	}
426 }
427 
428 static
makeOrderMessage(int tbl[MAX_DISPLAY_ORDER])429 char *makeOrderMessage(int tbl[MAX_DISPLAY_ORDER])
430 {
431 	static char	msgbuf[64];
432 	int	i;
433 
434 	msgbuf[0] = '\0';
435 	for (i = 0; i <= MAX_DISPLAY_ORDER; i++) {
436 		if (tbl[0] == i) {
437 			strcat(msgbuf, "����\n");
438 		}
439 		if (tbl[1] == i) {
440 			strcat(msgbuf, "���٥��\n");
441 		}
442 		if (tbl[2] == i) {
443 			strcat(msgbuf, "��������̿��\n");
444 		}
445 		if (tbl[3] == i) {
446 			strcat(msgbuf, "���\n");
447 		}
448 		if (tbl[4] == i) {
449 			strcat(msgbuf, "�������塼��\n");
450 		}
451 	}
452 
453 	return (msgbuf);
454 }
455 
displayTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)456 LRESULT CALLBACK displayTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
457 {
458 	int		i;
459 	int		n;
460 	int		order[MAX_DISPLAY_ORDER];
461 	BOOL	bFlag;
462 
463 	switch (iMessage) {
464 	case WM_INITDIALOG:
465 		CheckDlgButton(hDlg, IDC_DISP_CHK_DATE, date_flag);
466 		CheckDlgButton(hDlg, IDC_DISP_CHK_BIRTHDAY, birthday_flag);
467 		CheckDlgButton(hDlg, IDC_DISP_CHK_EVENT, event_flag);
468 		CheckDlgButton(hDlg, IDC_DISP_CHK_HISTORY, history_flag);
469 		CheckDlgButton(hDlg, IDC_DISP_CHK_SCHEDULE, schedule_flag);
470 		CheckDlgButton(hDlg, IDC_DISP_CHK_DEATHDAY, deathday_flag);
471 		if (birthday_flag == FALSE) {
472 			EnableWindow(GetDlgItem(hDlg, IDC_DISP_CHK_DEATHDAY), FALSE);
473 		}
474 		SetDlgItemText(hDlg, IDC_DISP_ORDER_PREVIEW, (LPCTSTR)makeOrderMessage(display_order));
475 		for (i = 0; i < MAX_DISPLAY_ORDER; i++) {
476 			SetDlgItemInt(hDlg, IDC_DISP_ORDER_EDIT1 + i, (int)display_order[i], TRUE);
477 			SendDlgItemMessage(hDlg, IDC_DISP_ORDER_EDIT1 + i, EM_LIMITTEXT, 1, 0L);
478 		}
479 		return (TRUE);
480 	case WM_COMMAND:
481 		switch (HIWORD(wParam)) {
482 		case EN_CHANGE:
483 			if (LOWORD(wParam) >= IDC_DISP_ORDER_EDIT1 && LOWORD(wParam) <= IDC_DISP_ORDER_EDIT5) {
484 				for (i = 0; i < MAX_DISPLAY_ORDER; i++) {
485 					n = GetDlgItemInt(hDlg, IDC_DISP_ORDER_EDIT1 + i, &bFlag, TRUE);
486 					if (bFlag == TRUE) {
487 						order[i] = n;
488 					} else {
489 						order[i] = -1;
490 					}
491 				}
492 				SetDlgItemText(hDlg, IDC_DISP_ORDER_PREVIEW, (LPCTSTR)makeOrderMessage(order));
493 				return (TRUE);
494 			}
495 			break;
496 		case BN_CLICKED:
497 			if (LOWORD(wParam) == IDC_DISP_CHK_BIRTHDAY) {
498 				EnableWindow(GetDlgItem(hDlg, IDC_DISP_CHK_DEATHDAY), (IsDlgButtonChecked(hDlg, LOWORD(wParam)) == BST_CHECKED) ? TRUE : FALSE);
499 				return (TRUE);
500 			}
501 		}
502 		break;
503 	case WM_NOTIFY:
504 		switch (((NMHDR *)lParam)->code) {
505 		case PSN_KILLACTIVE:
506 			for (i = 0; i < MAX_DISPLAY_ORDER; i++) {
507 				n = GetDlgItemInt(hDlg, IDC_DISP_ORDER_EDIT1 + i, &bFlag, TRUE);
508 				if (bFlag == FALSE || n < 0 || n > MAX_DISPLAY_ORDER) {
509 					LoadString(ghInstance, IDC_DISP_ORDER_EDIT1 + i, szText, sizeof(szText));
510 					sprintf(msg, "%s���ϰ���ˤ���ޤ���", szText);
511 					MessageBox(hDlg, msg, "�ϰϥ��顼", MB_ICONINFORMATION | MB_OK);
512 					SetWindowLong(hDlg, DWL_MSGRESULT, TRUE);
513 				}
514 			}
515 			return (TRUE);
516 		case PSN_APPLY:
517 			updateCheckButton(hDlg, IDC_DISP_CHK_DATE, &date_flag);
518 			updateCheckButton(hDlg, IDC_DISP_CHK_BIRTHDAY, &birthday_flag);
519 			updateCheckButton(hDlg, IDC_DISP_CHK_EVENT, &event_flag);
520 			updateCheckButton(hDlg, IDC_DISP_CHK_HISTORY, &history_flag);
521 			updateCheckButton(hDlg, IDC_DISP_CHK_SCHEDULE, &schedule_flag);
522 			updateCheckButton(hDlg, IDC_DISP_CHK_DEATHDAY, &deathday_flag);
523 			for (i = 0; i < MAX_DISPLAY_ORDER; i++) {
524 				updateCheckEditInt(hDlg, IDC_DISP_ORDER_EDIT1 + i, &display_order[i]);
525 			}
526 			return (TRUE);
527 		}
528 		break;
529 	case WM_HELP:
530 		commonHelpControl(propHelpID, (LPHELPINFO)lParam);
531 		return (TRUE);
532 	}
533 
534 	return (FALSE);
535 }
536 
dateTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)537 LRESULT CALLBACK dateTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
538 {
539 	int	state;
540 
541 	switch (iMessage) {
542 	case WM_INITDIALOG:
543 		CheckRadioButton(hDlg, IDC_DATE_RBTN_DATE1, IDC_DATE_RBTN_DATE2, date_yeartype == DATE_YEAR_AD ? IDC_DATE_RBTN_DATE1 : IDC_DATE_RBTN_DATE2);
544 		CheckRadioButton(hDlg, IDC_DATE_RBTN_TIME1, IDC_DATE_RBTN_TIME2, date_timesystem_type == DATE_TIMESYSTEM_12H ? IDC_DATE_RBTN_TIME1 : IDC_DATE_RBTN_TIME2);
545 		CheckDlgButton(hDlg, IDC_DATE_CHK_KYUREKI, date_kyureki_flag);
546 		CheckDlgButton(hDlg, IDC_DATE_CHK_ETO1, date_eto_flag);
547 		CheckDlgButton(hDlg, IDC_DATE_CHK_ETO2, date_eto2_flag);
548 		EnableWindow(GetDlgItem(hDlg, IDC_DATE_CHK_ETO2), date_eto_flag);
549 		CheckDlgButton(hDlg, IDC_DATE_CHK_9SEI, date_kyusei_flag);
550 		CheckDlgButton(hDlg, IDC_DATE_CHK_12CHOKU, date_12_flag);
551 		CheckDlgButton(hDlg, IDC_DATE_CHK_28SYUKU, date_28_flag);
552 		return (TRUE);
553 	case WM_COMMAND:
554 		switch (HIWORD(wParam)) {
555 		case BN_CLICKED:
556 			if (LOWORD(wParam) == IDC_DATE_CHK_ETO1) {
557 				EnableWindow(GetDlgItem(hDlg, IDC_DATE_CHK_ETO2), IsDlgButtonChecked(hDlg, IDC_DATE_CHK_ETO1));
558 			}
559 			return (TRUE);
560 		}
561 		break;
562 	case WM_NOTIFY:
563 		switch (((NMHDR *)lParam)->code) {
564 		case PSN_APPLY:
565 			state = IsDlgButtonChecked(hDlg, IDC_DATE_RBTN_DATE1) ? DATE_YEAR_AD : DATE_YEAR_JC;
566 			if (date_yeartype != state) {
567 				date_yeartype = state;
568 				bChange = TRUE;
569 			}
570 			state = IsDlgButtonChecked(hDlg, IDC_DATE_RBTN_TIME1) ? DATE_TIMESYSTEM_12H : DATE_TIMESYSTEM_24H;
571 			if (date_timesystem_type != state) {
572 				date_timesystem_type = state;
573 				bChange = TRUE;
574 			}
575 			updateCheckButton(hDlg, IDC_DATE_CHK_KYUREKI, &date_kyureki_flag);
576 			updateCheckButton(hDlg, IDC_DATE_CHK_ETO1, &date_eto_flag);
577 			updateCheckButton(hDlg, IDC_DATE_CHK_ETO2, &date_eto2_flag);
578 			updateCheckButton(hDlg, IDC_DATE_CHK_9SEI, &date_kyusei_flag);
579 			updateCheckButton(hDlg, IDC_DATE_CHK_12CHOKU, &date_12_flag);
580 			updateCheckButton(hDlg, IDC_DATE_CHK_28SYUKU, &date_28_flag);
581 			return (TRUE);
582 		}
583 		break;
584 	case WM_HELP:
585 		commonHelpControl(propHelpID, (LPHELPINFO)lParam);
586 		return (TRUE);
587 	}
588 
589 	return (FALSE);
590 }
591 
birthdayTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)592 LRESULT CALLBACK birthdayTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
593 {
594 	int		i;
595 	BOOL	bFlag;
596 
597 	switch (iMessage) {
598 	case WM_INITDIALOG:
599 		setDropListInt(hDlg, IDC_BIRTH_CBBOX_NOTICE, list_notice, MAXLIST(list_notice), birthday_notice_flag);
600 		SetDlgItemInt(hDlg, IDC_BIRTH_EDIT_NOTICE, birthday_notice_range, TRUE);
601 		SendDlgItemMessage(hDlg, IDC_BIRTH_EDIT_NOTICE, EM_LIMITTEXT, 2, 0L);
602 		SendDlgItemMessage(hDlg, IDC_BIRTH_UPDOWN_NOTICE, UDM_SETRANGE, 0, (LPARAM)MAKELONG(MAX_DAYOFMONTH, 0));
603 		setDropListInt(hDlg, IDC_BIRTH_CBBOX_AGE, list_age, MAXLIST(list_age), birthday_agelevel);
604 		setDropListInt(hDlg, IDC_BIRTH_CBBOX_AGESORT, list_sort, MAXLIST(list_sort), birthday_agesort);
605 		setDropListText(hDlg, IDC_BIRTH_CBBOX_SORT, list_order, MAXLIST(list_order), birthday_sortorder);
606 		setFileList(hDlg, IDC_BIRTH_EDIT_FILE, birthday_filetbl, MAXBIRTHFILE);
607 		CheckDlgButton(hDlg, IDC_BIRTH_FLOWER, birthday_flower);
608 		setDropListInt(hDlg, IDC_DEATH_CBBOX_NOTICE, list_notice, MAXLIST(list_notice), deathday_notice_flag);
609 		SetDlgItemInt(hDlg, IDC_DEATH_EDIT_NOTICE, deathday_notice_range, TRUE);
610 		SendDlgItemMessage(hDlg, IDC_DEATH_EDIT_NOTICE, EM_LIMITTEXT, 2, 0L);
611 		SendDlgItemMessage(hDlg, IDC_DEATH_UPDOWN_NOTICE, UDM_SETRANGE, 0, (LPARAM)MAKELONG(MAX_DAYOFMONTH, 0));
612 		setDropListInt(hDlg, IDC_DEATH_CBBOX_AGE, list_death_age, MAXLIST(list_death_age), deathday_agelevel);
613 		setDropListInt(hDlg, IDC_BIRTH_ADDINFO, list_addinfo, MAXLIST(list_addinfo), birthday_addinfo);
614 		return (TRUE);
615 	case WM_NOTIFY:
616 		switch (((NMHDR *)lParam)->code) {
617 		case PSN_KILLACTIVE:
618 			i = GetDlgItemInt(hDlg, IDC_BIRTH_EDIT_NOTICE, &bFlag, TRUE);
619 			if (bFlag == FALSE || i < 0 || i > MAX_DAYOFMONTH) {
620 				LoadString(ghInstance, IDC_BIRTH_EDIT_NOTICE, szText, sizeof(szText));
621 				sprintf(msg, "%s���ϰ���ˤ���ޤ���", szText);
622 				MessageBox(hDlg, msg, "�ϰϥ��顼", MB_ICONINFORMATION | MB_OK);
623 				SetWindowLong(hDlg, DWL_MSGRESULT, TRUE);
624 			}
625 			return (TRUE);
626 		case PSN_APPLY:
627 			updateCheckDropListInt(hDlg, IDC_BIRTH_CBBOX_NOTICE, &birthday_notice_flag);
628 			updateCheckEditInt(hDlg, IDC_BIRTH_EDIT_NOTICE, &birthday_notice_range);
629 			updateCheckDropListInt(hDlg, IDC_BIRTH_CBBOX_AGE, &birthday_agelevel);
630 			updateCheckDropListInt(hDlg, IDC_BIRTH_CBBOX_AGESORT, &birthday_agesort);
631 			updateCheckEditText(hDlg, IDC_BIRTH_CBBOX_SORT, &birthday_sortorder);
632 			updateCheckEditTextList(hDlg, IDC_BIRTH_EDIT_FILE, &birthday_filetbl[0], MAXBIRTHFILE);
633 			updateCheckButton(hDlg, IDC_BIRTH_FLOWER, &birthday_flower);
634 			updateCheckDropListInt(hDlg, IDC_DEATH_CBBOX_NOTICE, &deathday_notice_flag);
635 			updateCheckEditInt(hDlg, IDC_DEATH_EDIT_NOTICE, &deathday_notice_range);
636 			updateCheckDropListInt(hDlg, IDC_DEATH_CBBOX_AGE, &deathday_agelevel);
637 			updateCheckDropListInt(hDlg, IDC_BIRTH_ADDINFO, &birthday_addinfo);
638 			return (TRUE);
639 		}
640 		break;
641 	case WM_HELP:
642 		commonHelpControl(propHelpID, (LPHELPINFO)lParam);
643 		return (TRUE);
644 	}
645 
646 	return (FALSE);
647 }
648 
eventTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)649 LRESULT CALLBACK eventTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
650 {
651 	int		i;
652 	BOOL	bFlag;
653 
654 	switch (iMessage) {
655 	case WM_INITDIALOG:
656 		setDropListInt(hDlg, IDC_EVENT_CBBOX_NOTICE, list_notice, MAXLIST(list_notice), event_notice_flag);
657 		SetDlgItemInt(hDlg, IDC_EVENT_EDIT_NOTICE, event_notice_range, TRUE);
658 		SendDlgItemMessage(hDlg, IDC_EVENT_EDIT_NOTICE, EM_LIMITTEXT, 2, 0L);
659 		SendDlgItemMessage(hDlg, IDC_EVENT_UPDOWN_NOTICE, UDM_SETRANGE, 0, (LPARAM)MAKELONG(MAX_DAYOFMONTH, 0));
660 		CheckDlgButton(hDlg, IDC_EVENT_CHK_RANGE, event_range_flag);
661 		setDropListText(hDlg, IDC_EVENT_CBBOX_SORT, list_order, MAXLIST(list_order), event_sortorder);
662 		setFileList(hDlg, IDC_EVENT_EDIT_FILE1, event_filetbl, MAXEVENTFILE);
663 		setFileList(hDlg, IDC_EVENT_EDIT_FILE2, week_filetbl, MAXWEEKFILE);
664 		return (TRUE);
665 	case WM_NOTIFY:
666 		switch (((NMHDR *)lParam)->code) {
667 		case PSN_KILLACTIVE:
668 			i = GetDlgItemInt(hDlg, IDC_EVENT_EDIT_NOTICE, &bFlag, TRUE);
669 			if (bFlag == FALSE || i < 0 || i > MAX_DAYOFMONTH) {
670 				LoadString(ghInstance, IDC_EVENT_EDIT_NOTICE, szText, sizeof(szText));
671 				sprintf(msg, "%s���ϰ���ˤ���ޤ���", szText);
672 				MessageBox(hDlg, msg, "�ϰϥ��顼", MB_ICONINFORMATION | MB_OK);
673 				SetWindowLong(hDlg, DWL_MSGRESULT, TRUE);
674 			}
675 			return (TRUE);
676 		case PSN_APPLY:
677 			updateCheckDropListInt(hDlg, IDC_EVENT_CBBOX_NOTICE, &event_notice_flag);
678 			updateCheckEditInt(hDlg, IDC_EVENT_EDIT_NOTICE, &event_notice_range);
679 			updateCheckButton(hDlg, IDC_EVENT_CHK_RANGE, &event_range_flag);
680 			updateCheckEditText(hDlg, IDC_EVENT_CBBOX_SORT, &event_sortorder);
681 			updateCheckEditTextList(hDlg, IDC_EVENT_EDIT_FILE1, event_filetbl, MAXEVENTFILE);
682 			updateCheckEditTextList(hDlg, IDC_EVENT_EDIT_FILE2, week_filetbl, MAXWEEKFILE);
683 			return (TRUE);
684 		}
685 		break;
686 	case WM_HELP:
687 		commonHelpControl(propHelpID, (LPHELPINFO)lParam);
688 		return (TRUE);
689 	}
690 
691 	return (FALSE);
692 }
693 
694 static
sortLevelList(const void * x,const void * y)695 int sortLevelList(const void *x, const void *y)
696 {
697 	int	diff;
698 
699 	diff = ((struct LEVEL_LIST *)x)->level - ((struct LEVEL_LIST *)y)->level;
700 	if (diff == 0) {
701 		diff = strcmp(((struct LEVEL_LIST *)x)->string, ((struct LEVEL_LIST *)y)->string);
702 	}
703 	return (diff);
704 }
705 
706 static
addLevelList(HWND hDlg,struct LEVEL_LIST * levellist)707 void addLevelList(HWND hDlg, struct LEVEL_LIST *levellist)
708 {
709 	int	i;
710 	struct LEVEL_LIST	*list;
711 
712 	list = (struct LEVEL_LIST *)malloc(sizeof(struct LEVEL_LIST) * MAXLVAR);
713 	if (list != NULL) {
714 		for (i = 0; i < MAXLVAR; i++) {
715 			list[i] = levellist[i];
716 		}
717 
718 		qsort(list, MAXLVAR, sizeof(struct LEVEL_LIST), sortLevelList);
719 
720 		SendDlgItemMessage(hDlg, IDC_LEVEL_LIST, LB_RESETCONTENT, 0, 0L);
721 		for (i = 0; i < MAXLVAR; i++) {
722 			SendDlgItemMessage(hDlg,IDC_LEVEL_LIST, LB_ADDSTRING, 0, (LPARAM)list[i].string);
723 		}
724 
725 		free(list);
726 	}
727 }
728 
729 static
createLevelList(HWND hDlg,char level[MAXLVAR])730 void createLevelList(HWND hDlg, char level[MAXLVAR])
731 {
732 	int	i;
733 
734 	levellist = (struct LEVEL_LIST *)malloc(sizeof(struct LEVEL_LIST) * MAXLVAR);
735 	if (levellist != NULL) {
736 		for (i = 0; i < MAXLVAR; i++) {
737 			LoadString(ghInstance, IDC_LEVEL_EDIT_00 + i, szText, sizeof(szText));
738 			levellist[i].level = level[i];
739 			levellist[i].string = xstrdup(szText);
740 			SetDlgItemInt(hDlg, IDC_LEVEL_EDIT_00 + i, (int)level[i], TRUE);
741 			SendDlgItemMessage(hDlg, IDC_LEVEL_EDIT_00 + i, EM_LIMITTEXT, 2, 0L);
742 		}
743 		SendDlgItemMessage(hDlg, IDC_LEVEL_LIST, WM_SETFONT, (WPARAM)hfontPreview, TRUE);
744 		addLevelList(hDlg, levellist);
745 	}
746 }
747 
748 static
deleteLevelList(void)749 void deleteLevelList(void)
750 {
751 	int	i;
752 
753 	if (levellist != NULL) {
754 		for (i = 0; i < MAXLVAR; i++) {
755 			if (levellist[i].string != NULL) {
756 				free((char *)levellist[i].string);
757 			}
758 		}
759 		free(levellist);
760 		levellist = NULL;
761 	}
762 }
763 
levelTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)764 LRESULT CALLBACK levelTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
765 {
766 	static BOOL	bCritical = FALSE;
767 	int		i;
768 	int		n;
769 	BOOL	bFlag;
770 	char	*p;
771 	char	level[MAXLVAR];
772 	char	buf[MAXLVAR * 2 + 1];
773 
774 	switch (iMessage) {
775 	case WM_INITDIALOG:
776 		memset(level, 99, sizeof(level));
777 		if (event_level_str != NULL) {
778 			p = event_level_str;
779 			i = 0;
780 			while (*p != '\0' && i < MAXLVAR) {
781 				if (sscanf(p, "%02d", &n) != 1) {
782 					break;
783 				}
784 				level[i++] = (char)n;
785 				p += 2;
786 			}
787 		}
788 		bCritical = TRUE;
789 		createLevelList(hDlg, level);
790 		bCritical = FALSE;
791 		return (TRUE);
792 	case WM_COMMAND:
793 		switch (HIWORD(wParam)) {
794 		case EN_CHANGE:
795 			if (levellist != NULL &&
796 			    bCritical == FALSE &&
797 			    LOWORD(wParam) >= IDC_LEVEL_EDIT_00 && LOWORD(wParam) <= IDC_LEVEL_EDIT_00 + MAXLVAR - 1) {
798 				n = GetDlgItemInt(hDlg, LOWORD(wParam), &bFlag, TRUE);
799 				if (n < 0) {
800 					n = 0;
801 				}
802 				levellist[LOWORD(wParam) - IDC_LEVEL_EDIT_00].level = n;
803 				addLevelList(hDlg, levellist);
804 				return (TRUE);
805 			}
806 		}
807 		break;
808 	case WM_NOTIFY:
809 		switch (((NMHDR *)lParam)->code) {
810 		case PSN_APPLY:
811 			p = buf;
812 			for (i = 0; i < MAXLVAR; i++) {
813 				n = GetDlgItemInt(hDlg, IDC_LEVEL_EDIT_00 + i, &bFlag, TRUE);
814 				if (n < 0) {
815 					n = 0;
816 				}
817 				sprintf(p, "%02d", n);
818 				p += 2;
819 			}
820 			*p = '\0';
821 			if (event_level_str == NULL || strcmp(event_level_str, buf) != 0) {
822 				if (event_level_str != NULL) {
823 					free(event_level_str);
824 				}
825 				event_level_str = xstrdup(buf);
826 				bChange = TRUE;
827 			}
828 			return (TRUE);
829 		}
830 		break;
831 	case WM_HELP:
832 		commonHelpControl(propHelpID, (LPHELPINFO)lParam);
833 		return (TRUE);
834 	}
835 
836 	return (FALSE);
837 }
838 
historyTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)839 LRESULT CALLBACK historyTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
840 {
841 	int		i;
842 	UINT	idCtrl;
843 
844 	switch (iMessage) {
845 	case WM_INITDIALOG:
846 		CheckDlgButton(hDlg, IDC_HIST_CHK_BOTH_DATE, history_both_date);
847 		setDropListInt(hDlg, IDC_HIST_CBBOX_YEARCOM, list_hist_year, MAXLIST(list_hist_year), history_year_comment);
848 		setDropListInt(hDlg, IDC_HIST_CBBOX_ADDINFO, list_addinfo, MAXLIST(list_addinfo), history_addinfo);
849 		setDropListInt(hDlg, IDC_HIST_CBBOX_MSGTYPE, list_type, MAXLIST(list_type), history_foldtype);
850 		SetDlgItemText(hDlg, IDC_HIST_TEXT_PREVIEW, (LPCTSTR)msg_preview1[history_foldtype]);
851 		SendDlgItemMessage(hDlg, IDC_HIST_TEXT_PREVIEW, WM_SETFONT, (WPARAM)hfontPreview, TRUE);
852 		setDropListInt(hDlg, IDC_HIST_CBBOX_SORT, list_sort, MAXLIST(list_sort), history_sort);
853 		setFileList(hDlg, IDC_HIST_EDIT_FILE, history_filetbl, MAXHISTORYFILE);
854 		return (TRUE);
855 	case WM_COMMAND:
856 		switch (HIWORD(wParam)) {
857 		case CBN_SELENDOK:
858 			idCtrl = LOWORD(wParam);
859 			if (idCtrl == IDC_HIST_CBBOX_MSGTYPE) {
860 				i = SendMessage((HWND)lParam, CB_GETCURSEL, 0, 0L);
861 				if (i != CB_ERR) {
862 					SetDlgItemText(hDlg, IDC_HIST_TEXT_PREVIEW, (LPCTSTR)msg_preview1[i]);
863 				} else {
864 					SetDlgItemText(hDlg, IDC_HIST_TEXT_PREVIEW, (LPCTSTR)"");
865 				}
866 				return (TRUE);
867 			}
868 			break;
869 		}
870 		break;
871 	case WM_NOTIFY:
872 		switch (((NMHDR *)lParam)->code) {
873 		case PSN_APPLY:
874 			updateCheckButton(hDlg, IDC_HIST_CHK_BOTH_DATE, &history_both_date);
875 			updateCheckDropListInt(hDlg, IDC_HIST_CBBOX_YEARCOM, &history_year_comment);
876 			updateCheckDropListInt(hDlg, IDC_HIST_CBBOX_ADDINFO, &history_addinfo);
877 			i = history_foldtype;
878 			updateCheckDropListInt(hDlg, IDC_HIST_CBBOX_MSGTYPE, &i);
879 			history_foldtype = i;
880 			updateCheckDropListInt(hDlg, IDC_HIST_CBBOX_SORT, &history_sort);
881 			updateCheckEditTextList(hDlg, IDC_HIST_EDIT_FILE, history_filetbl, MAXHISTORYFILE);
882 			return (TRUE);
883 		}
884 		break;
885 	case WM_HELP:
886 		commonHelpControl(propHelpID, (LPHELPINFO)lParam);
887 		return (TRUE);
888 	}
889 
890 	return (FALSE);
891 }
892 
scheduleTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)893 LRESULT CALLBACK scheduleTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
894 {
895 	int		i;
896 	BOOL	bFlag;
897 	UINT	idCtrl;
898 
899 	switch (iMessage) {
900 	case WM_INITDIALOG:
901 		SetDlgItemInt(hDlg, IDC_SCHE_EDIT_NOTICE, schedule_limit, TRUE);
902 		SendDlgItemMessage(hDlg, IDC_SCHE_EDIT_NOTICE, EM_LIMITTEXT, 3, 0L);
903 		SendDlgItemMessage(hDlg, IDC_SCHE_UPDOWN_NOTICE, UDM_SETRANGE, 0, (LPARAM)MAKELONG(MAX_DAYOFMONTH, -MAX_DAYOFMONTH));
904 		setDropListInt(hDlg, IDC_SCHE_CBBOX_MSGTYPE, list_type, MAXLIST(list_type), schedule_foldtype);
905 		SetDlgItemText(hDlg, IDC_SCHE_TEXT_PREVIEW, (LPCTSTR)msg_preview2[schedule_foldtype]);
906 		SendDlgItemMessage(hDlg, IDC_SCHE_TEXT_PREVIEW, WM_SETFONT, (WPARAM)hfontPreview, TRUE);
907 		setFileList(hDlg, IDC_SCHE_EDIT_FILE, schedule_filetbl, MAXSCHEDULEFILE);
908 		return (TRUE);
909 	case WM_COMMAND:
910 		switch (HIWORD(wParam)) {
911 		case CBN_SELENDOK:
912 			idCtrl = LOWORD(wParam);
913 			if (idCtrl == IDC_SCHE_CBBOX_MSGTYPE) {
914 				i = SendMessage((HWND)lParam, CB_GETCURSEL, 0, 0L);
915 				if (i != CB_ERR) {
916 					SetDlgItemText(hDlg, IDC_SCHE_TEXT_PREVIEW, (LPCTSTR)msg_preview2[i]);
917 				} else {
918 					SetDlgItemText(hDlg, IDC_SCHE_TEXT_PREVIEW, (LPCTSTR)"");
919 				}
920 				return (TRUE);
921 			}
922 			break;
923 		}
924 		break;
925 	case WM_NOTIFY:
926 		switch (((NMHDR *)lParam)->code) {
927 		case PSN_KILLACTIVE:
928 			i = GetDlgItemInt(hDlg, IDC_SCHE_EDIT_NOTICE, &bFlag, TRUE);
929 			if (bFlag == FALSE) {
930 				LoadString(ghInstance, IDC_SCHE_EDIT_NOTICE, szText, sizeof(szText));
931 				sprintf(msg, "%s�ˤϿ��ͤ����Ϥ��Ʋ�����", szText);
932 				MessageBox(hDlg, msg, "���ϥ��顼", MB_ICONINFORMATION | MB_OK);
933 				SetWindowLong(hDlg, DWL_MSGRESULT, TRUE);
934 			} else if (i < -MAX_DAYOFMONTH || i > MAX_DAYOFMONTH) {
935 				LoadString(ghInstance, IDC_SCHE_EDIT_NOTICE, szText, sizeof(szText));
936 				sprintf(msg, "%s���ϰ���ˤ���ޤ���", szText);
937 				MessageBox(hDlg, msg, "�ϰϥ��顼", MB_ICONINFORMATION | MB_OK);
938 				SetWindowLong(hDlg, DWL_MSGRESULT, TRUE);
939 			}
940 			return (TRUE);
941 		case PSN_APPLY:
942 			updateCheckEditInt(hDlg, IDC_SCHE_EDIT_NOTICE, &schedule_limit);
943 			i = schedule_foldtype;
944 			updateCheckDropListInt(hDlg, IDC_SCHE_CBBOX_MSGTYPE, &i);
945 			schedule_foldtype = i;
946 			updateCheckEditTextList(hDlg, IDC_SCHE_EDIT_FILE, schedule_filetbl, MAXSCHEDULEFILE);
947 			return (TRUE);
948 		}
949 		break;
950 	case WM_HELP:
951 		commonHelpControl(propHelpID, (LPHELPINFO)lParam);
952 		return (TRUE);
953 	}
954 
955 	return (FALSE);
956 }
957 
scrnEnumFontProc(ENUMLOGFONTEX * lpelfe,NEWTEXTMETRICEX * lpntme,DWORD nFontType,LPARAM lParam)958 int CALLBACK scrnEnumFontProc(ENUMLOGFONTEX *lpelfe, NEWTEXTMETRICEX *lpntme, DWORD nFontType, LPARAM lParam)
959 {
960 //	if (nFontType & TRUETYPE_FONTTYPE) {
961 		if (lpelfe->elfLogFont.lfFaceName[0] != '@') {
962 			if (IsWindow((HWND)lParam)) {
963 				SendMessage((HWND)lParam, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)lpelfe->elfLogFont.lfFaceName);
964 			}
965 		}
966 //	}
967 
968 	return (TRUE);
969 }
970 
971 static
scrnSetFontList(HWND hwnd,int ctrlID)972 void scrnSetFontList(HWND hwnd, int ctrlID)
973 {
974 	LOGFONT	lf;
975 	HDC	hdc;
976 	int	n;
977 
978 	SendDlgItemMessage(hwnd, ctrlID, CB_ADDSTRING, 0, (LPARAM)TEXT_SYSFONTNAME);
979 	SendDlgItemMessage(hwnd, ctrlID, CB_SETCURSEL, 0, 0);
980 	memset(&lf, 0, sizeof(lf));
981 	lf.lfCharSet = SHIFTJIS_CHARSET;
982 	hdc = GetDC(hwnd);
983 	EnumFontFamiliesEx(hdc, &lf, (FONTENUMPROC)scrnEnumFontProc, (LPARAM)GetDlgItem(hwnd, ctrlID), 0);
984 	ReleaseDC(hwnd, hdc);
985 
986 	if (disp_fontname != NULL) {
987 		n = SendDlgItemMessage(hwnd, ctrlID, CB_FINDSTRING, -1, (LPARAM)disp_fontname);
988 		if (n != CB_ERR) {
989 			SendDlgItemMessage(hwnd, ctrlID, CB_SETCURSEL, n, 0);
990 		}
991 	}
992 }
993 
994 /*
995  * ���Ѹ塢free() ��Ƥ֤���
996  * �����ƥ�ե���Ȼ���NULL ���֤�
997  */
998 static
scrnGetFontName(HWND hwnd,int ctrlID)999 char *scrnGetFontName(HWND hwnd, int ctrlID)
1000 {
1001 	int	n;
1002 	int	textlen;
1003 	char	*fontname = NULL;
1004 
1005 	n = SendDlgItemMessage(hwnd, ctrlID, CB_GETCURSEL, 0, 0);
1006 	if (n != CB_ERR) {
1007 		textlen = SendDlgItemMessage(hwnd, ctrlID, CB_GETLBTEXTLEN, n, 0);
1008 		if (textlen != CB_ERR) {
1009 			fontname = malloc(textlen + 1);
1010 			if (fontname != NULL) {
1011 				if (SendDlgItemMessage(hwnd, ctrlID, CB_GETLBTEXT, n, (LPARAM)fontname) == CB_ERR ||
1012 				    strcmp(fontname, TEXT_SYSFONTNAME) == 0) {
1013 					free(fontname);
1014 					fontname = NULL;	/* �����ƥ�ե���Ȥ�������Ƥ��� */
1015 				}
1016 			}
1017 		}
1018 	}
1019 
1020 	return (fontname);
1021 }
1022 
1023 /*
1024  * �����ƥ�ե���Ȼ���NULL ���֤�
1025  */
1026 static
scrnGetFontObject(HWND hwnd,int ctrlID,int ctrlID2)1027 HFONT scrnGetFontObject(HWND hwnd, int ctrlID, int ctrlID2)
1028 {
1029 	char	*new_fontname;
1030 	int	new_fontsize;
1031 	HFONT	hFont = NULL;
1032 	BOOL	bFlag;
1033 
1034 	new_fontname = scrnGetFontName(hwnd, ctrlID);
1035 	if (new_fontname != NULL) {
1036 		new_fontsize = GetDlgItemInt(hwnd, ctrlID2, &bFlag, TRUE);
1037 		if (bFlag != TRUE) {
1038 			new_fontsize = 0;
1039 		}
1040 		hFont = createDisplayFontObject(hwnd, new_fontname, &new_fontsize);
1041 		free(new_fontname);
1042 	}
1043 
1044 	return (hFont);
1045 }
1046 
1047 static
scrnUpdateCheckFontName(HWND hwnd,int ctrlID,char ** fontname)1048 void scrnUpdateCheckFontName(HWND hwnd, int ctrlID, char **fontname)
1049 {
1050 	char	*new_fontname;
1051 
1052 	new_fontname = scrnGetFontName(hwnd, ctrlID);
1053 
1054 	if ((*fontname == NULL && new_fontname != NULL) ||
1055 	    (*fontname != NULL && new_fontname == NULL) ||
1056 	    (*fontname != NULL && new_fontname != NULL &&
1057 	     strcmp(*fontname, new_fontname) != 0)) {
1058 		if (*fontname != NULL) {
1059 			free(*fontname);
1060 		}
1061 		*fontname = new_fontname;
1062 		bChange = TRUE;
1063 		bChangeDisplayParam = TRUE;
1064 	} else {
1065 		if (new_fontname != NULL) {
1066 			free(new_fontname);
1067 		}
1068 	}
1069 }
1070 
1071 static
scrnUpdateCheckEditInt(HWND hDlg,int ctrlID,int * ip)1072 void scrnUpdateCheckEditInt(HWND hDlg, int ctrlID, int *ip)
1073 {
1074 	int	x;
1075 	BOOL	bFlag;
1076 
1077 	x = GetDlgItemInt(hDlg, ctrlID, &bFlag, TRUE);
1078 	if (bFlag == TRUE && *ip != x) {
1079 		*ip = x;
1080 		bChange = TRUE;
1081 		bChangeDisplayParam = TRUE;
1082 	}
1083 }
1084 
screenTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)1085 LRESULT CALLBACK screenTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
1086 {
1087 	static int	ctrlTbl[5] = {
1088 		IDC_SCRN_EDIT_W, IDC_SCRN_EDIT_H, IDC_SCRN_EDIT_C01, IDC_SCRN_EDIT_C02,
1089 		IDC_SCRN_FONTSIZE,
1090 	};
1091 	int		i;
1092 	int		j;
1093 	int		col;
1094 	BOOL	bErr;
1095 	BOOL	bFlag;
1096 	UINT	idCtrl;
1097 	LPDRAWITEMSTRUCT	lpDIS;
1098 	HBRUSH	hBrush;
1099 	HFONT	hFont;
1100 	HFONT	oldFont;
1101 
1102 	switch (iMessage) {
1103 	case WM_INITDIALOG:
1104 		SetDlgItemInt(hDlg, IDC_SCRN_EDIT_W, screen_max_columns, TRUE);
1105 		SendDlgItemMessage(hDlg, IDC_SCRN_EDIT_W, EM_LIMITTEXT, 3, 0L);
1106 		SendDlgItemMessage(hDlg, IDC_SCRN_UPDOWN_W, UDM_SETRANGE, 0, (LPARAM)MAKELONG(MAX_SCRN_W, MIN_SCRN_W));
1107 		SetDlgItemInt(hDlg, IDC_SCRN_EDIT_H, screen_max_rows, TRUE);
1108 		SendDlgItemMessage(hDlg, IDC_SCRN_EDIT_H, EM_LIMITTEXT, 3, 0L);
1109 		SendDlgItemMessage(hDlg, IDC_SCRN_UPDOWN_H, UDM_SETRANGE, 0, (LPARAM)MAKELONG(MAX_SCRN_H, MIN_SCRN_H));
1110 		SetDlgItemInt(hDlg, IDC_SCRN_EDIT_C01, win_default_color & 0x0F, TRUE);
1111 		SendDlgItemMessage(hDlg, IDC_SCRN_EDIT_C01, EM_LIMITTEXT, 2, 0L);
1112 		SetDlgItemInt(hDlg, IDC_SCRN_EDIT_C02, (win_default_color >> 4) & 0x0F, TRUE);
1113 		SendDlgItemMessage(hDlg, IDC_SCRN_EDIT_C02, EM_LIMITTEXT, 2, 0L);
1114 		scrnSetFontList(hDlg, IDC_SCRN_FONTLIST);
1115 		SetDlgItemInt(hDlg, IDC_SCRN_FONTSIZE, disp_fontsize, TRUE);
1116 		SendDlgItemMessage(hDlg, IDC_SCRN_FONTSIZE, EM_LIMITTEXT, 2, 0L);
1117 		SendDlgItemMessage(hDlg, IDC_SCRN_UPDOWN_FS, UDM_SETRANGE, 0, (LPARAM)MAKELONG(MAX_FONTSIZE, MIN_FONTSIZE));
1118 		if (CHK_EXTFLAGS(EXTFLAGS_FONTCHOOSE) == 0) {
1119 			ShowWindow(GetDlgItem(hDlg, IDC_SCRN_FONTLIST), SW_HIDE);
1120 			ShowWindow(GetDlgItem(hDlg, IDC_SCRN_FONTSIZE), SW_HIDE);
1121 			ShowWindow(GetDlgItem(hDlg, IDC_SCRN_UPDOWN_FS), SW_HIDE);
1122 			ShowWindow(GetDlgItem(hDlg, IDC_SCRN_FONTSIZET), SW_HIDE);
1123 		}
1124 		return (TRUE);
1125 	case WM_COMMAND:
1126 		idCtrl = LOWORD(wParam);
1127 		switch (HIWORD(wParam)) {
1128 		case EN_CHANGE:
1129 			if (idCtrl == IDC_SCRN_EDIT_C01 || idCtrl == IDC_SCRN_EDIT_C02) {
1130 				InvalidateRect(GetDlgItem(hDlg, idCtrl - IDC_SCRN_EDIT_C01 + IDC_SCRN_DRAW_01), NULL, FALSE);
1131 				InvalidateRect(GetDlgItem(hDlg, IDC_SCRN_PREVIEW), NULL, FALSE);
1132 				return (TRUE);
1133 			} else if (idCtrl == IDC_SCRN_FONTSIZE) {
1134 				InvalidateRect(GetDlgItem(hDlg, IDC_SCRN_PREVIEW), NULL, FALSE);
1135 				return (TRUE);
1136 			}
1137 			break;
1138 		case CBN_SELCHANGE:
1139 //		case STN_DBLCLK:	/* CBN_SELCHANGE ��Ʊ���� */
1140 			if (idCtrl == IDC_SCRN_FONTLIST) {
1141 				InvalidateRect(GetDlgItem(hDlg, IDC_SCRN_PREVIEW), NULL, FALSE);
1142 				return (TRUE);
1143 			} else if (idCtrl == IDC_SCRN_DRAW_01 || idCtrl == IDC_SCRN_DRAW_02) {
1144 				idCtrl = idCtrl - IDC_SCRN_DRAW_01 + IDC_SCRN_EDIT_C01;
1145 				col = GetDlgItemInt(hDlg, idCtrl, &bFlag, TRUE);
1146 				if (bFlag == FALSE || col < 0 || col >= MAX_COLORMAP) {
1147 					col = 0;
1148 				}
1149 				if (SelectColorMapNo(hDlg, ghInstance, &col, win_colormap, MAX_COLORMAP) == TRUE) {
1150 					SetDlgItemInt(hDlg, idCtrl, col, TRUE);
1151 					SetFocus(GetDlgItem(hDlg, idCtrl));
1152 					SendDlgItemMessage(hDlg, idCtrl, EM_SETSEL, 0, -1);
1153 					InvalidateRect((HWND)lParam, NULL, FALSE);
1154 				}
1155 				return (TRUE);
1156 			}
1157 			break;
1158 		}
1159 		break;
1160 	case WM_DRAWITEM:
1161 		idCtrl = (UINT)wParam;
1162 		lpDIS = (LPDRAWITEMSTRUCT)lParam;
1163 		if (idCtrl == IDC_SCRN_DRAW_01 || idCtrl == IDC_SCRN_DRAW_02) {
1164 			col = GetDlgItemInt(hDlg, idCtrl - IDC_SCRN_DRAW_01 + IDC_SCRN_EDIT_C01, &bFlag, TRUE);
1165 			if (bFlag == TRUE && col >= 0 && col < MAX_COLORMAP) {
1166 				hBrush = CreateSolidBrush(RGB2PALETTERGB(win_colormap[col]));
1167 				FillRect(lpDIS->hDC, &lpDIS->rcItem, hBrush);
1168 				DeleteObject(hBrush);
1169 				return (TRUE);
1170 			} else {
1171 				hBrush = (HBRUSH)SendMessage(hDlg, WM_CTLCOLORDLG, (WPARAM)lpDIS->hDC, (LPARAM)lpDIS->hwndItem);
1172 				FillRect(lpDIS->hDC, &lpDIS->rcItem, hBrush);
1173 				return (TRUE);
1174 			}
1175 		} else if (idCtrl >= IDC_SCRN_DRAW_S00 && idCtrl < (IDC_SCRN_DRAW_S00 + MAX_COLORMAP)) {
1176 			hBrush = CreateSolidBrush(RGB2PALETTERGB(win_colormap[idCtrl - IDC_SCRN_DRAW_S00]));
1177 			FillRect(lpDIS->hDC, &lpDIS->rcItem, hBrush);
1178 			DeleteObject(hBrush);
1179 			return (TRUE);
1180 		} else if (idCtrl == IDC_SCRN_PREVIEW) {
1181 			int	fc, bc;
1182 			RECT	wRc;
1183 
1184 			fc = GetDlgItemInt(hDlg, IDC_SCRN_EDIT_C01, &bFlag, TRUE);
1185 			if (bFlag == TRUE && fc >= 0 && fc < MAX_COLORMAP) {
1186 				fc = RGB2PALETTERGB(win_colormap[fc]);
1187 			} else {
1188 				fc = GetSysColor(COLOR_MENU);
1189 			}
1190 			bc = GetDlgItemInt(hDlg, IDC_SCRN_EDIT_C02, &bFlag, TRUE);
1191 			if (bFlag == TRUE && bc >= 0 && bc < MAX_COLORMAP) {
1192 				bc = RGB2PALETTERGB(win_colormap[bc]);
1193 			} else {
1194 				bc = GetSysColor(COLOR_MENU);
1195 			}
1196 			SetTextColor(lpDIS->hDC, fc);
1197 			SetBkColor(lpDIS->hDC, bc);
1198 			GetClientRect(hDlg, &wRc);
1199 			hBrush = CreateSolidBrush(bc);
1200 			FillRect(lpDIS->hDC, &wRc, hBrush);
1201 			DeleteObject(hBrush);
1202 			hFont = scrnGetFontObject(hDlg, IDC_SCRN_FONTLIST, IDC_SCRN_FONTSIZE);
1203 			if (hFont == NULL) {
1204 				oldFont = SelectObject(lpDIS->hDC, GetStockObject(SYSTEM_FIXED_FONT));
1205 			} else {
1206 				oldFont = SelectObject(lpDIS->hDC, hFont);
1207 			}
1208 			DrawText(lpDIS->hDC, MSG_PREVIEW_TEXT, -1, &wRc, DT_LEFT | DT_NOCLIP | DT_NOPREFIX);
1209 			SelectObject(lpDIS->hDC, oldFont);
1210 			if (hFont != NULL) {
1211 				DeleteObject(hFont);
1212 			}
1213 			return (TRUE);
1214 		}
1215 		break;
1216 	case WM_NOTIFY:
1217 		switch (((NMHDR *)lParam)->code) {
1218 		case PSN_KILLACTIVE:
1219 			bErr = FALSE;
1220 			for (i = 0; i < 5; i++) {
1221 				j = GetDlgItemInt(hDlg, ctrlTbl[i], &bFlag, TRUE);
1222 				switch (i) {
1223 				case 0:
1224 					if (bFlag == FALSE || j < MIN_SCRN_W || j > MAX_SCRN_W) {
1225 						bErr = TRUE;
1226 					}
1227 					break;
1228 				case 1:
1229 					if (bFlag == FALSE || j < MIN_SCRN_H || j > MAX_SCRN_H) {
1230 						bErr = TRUE;
1231 					}
1232 					break;
1233 				case 2:
1234 				case 3:
1235 					if (bFlag == FALSE || j < 0 || j >= MAX_COLORMAP) {
1236 						bErr = TRUE;
1237 					}
1238 					break;
1239 				case 4:
1240 					if (bFlag == FALSE || j < MIN_FONTSIZE || j > MAX_FONTSIZE) {
1241 						bErr = TRUE;
1242 					}
1243 					break;
1244 				}
1245 				if (bErr == TRUE) {
1246 					LoadString(ghInstance, ctrlTbl[i], szText, sizeof(szText));
1247 					sprintf(msg, "%s���ϰ���ˤ���ޤ���", szText);
1248 					MessageBox(hDlg, msg, "�ϰϥ��顼", MB_ICONINFORMATION | MB_OK);
1249 					SetWindowLong(hDlg, DWL_MSGRESULT, TRUE);
1250 					break;
1251 				}
1252 			}
1253 			return (TRUE);
1254 		case PSN_APPLY:
1255 			scrnUpdateCheckEditInt(hDlg, IDC_SCRN_EDIT_W, &screen_max_columns);
1256 			scrnUpdateCheckEditInt(hDlg, IDC_SCRN_EDIT_H, &screen_max_rows);
1257 			i = win_default_color & 0x0F;
1258 			j = (win_default_color >> 4) & 0x0F;
1259 			scrnUpdateCheckEditInt(hDlg, IDC_SCRN_EDIT_C01, &i);
1260 			scrnUpdateCheckEditInt(hDlg, IDC_SCRN_EDIT_C02, &j);
1261 			win_default_color = (j << 4) | i;
1262 			scrnUpdateCheckFontName(hDlg, IDC_SCRN_FONTLIST, &disp_fontname);
1263 			scrnUpdateCheckEditInt(hDlg, IDC_SCRN_FONTSIZE, &disp_fontsize);
1264 			return (TRUE);
1265 		}
1266 		break;
1267 	case WM_HELP:
1268 		commonHelpControl(propHelpID, (LPHELPINFO)lParam);
1269 		return (TRUE);
1270 	}
1271 
1272 	return (FALSE);
1273 }
1274 
fileTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)1275 LRESULT CALLBACK fileTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
1276 {
1277 	switch (iMessage) {
1278 	case WM_INITDIALOG:
1279 		CheckDlgButton(hDlg, IDC_FILE_CHK_FKEEP, pager_filekeep);
1280 		setEditText(hDlg, IDC_FILE_EDIT_FPATH, pager_filelog_path);
1281 		setEditText(hDlg, IDC_FILE_EDIT_FNAME, pager_outputfile);
1282 		setEditText(hDlg, IDC_FILE_EDIT_SUFFIX, suffix_file);
1283 		setEditText(hDlg, IDC_FILE_EDIT_TABLE, search_path);
1284 		return (TRUE);
1285 	case WM_NOTIFY:
1286 		switch (((NMHDR *)lParam)->code) {
1287 		case PSN_APPLY:
1288 			updateCheckButton(hDlg, IDC_FILE_CHK_FKEEP, &pager_filekeep);
1289 			updateCheckEditText(hDlg, IDC_FILE_EDIT_FPATH, &pager_filelog_path);
1290 			updateCheckEditText(hDlg, IDC_FILE_EDIT_FNAME, &pager_outputfile);
1291 			updateCheckEditText(hDlg, IDC_FILE_EDIT_SUFFIX, &suffix_file);
1292 			updateCheckEditText(hDlg, IDC_FILE_EDIT_TABLE, &search_path);
1293 			return (TRUE);
1294 		}
1295 		break;
1296 	case WM_HELP:
1297 		commonHelpControl(propHelpID, (LPHELPINFO)lParam);
1298 		return (TRUE);
1299 	}
1300 
1301 	return (FALSE);
1302 }
1303 
rekichuTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)1304 LRESULT CALLBACK rekichuTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
1305 {
1306 	char	*p;
1307 	char	ch;
1308 	int		i;
1309 	int		flags[MAX_REKICHU];
1310 
1311 	switch (iMessage) {
1312 	case WM_INITDIALOG:
1313 		for (i = 0; i < MAX_REKICHU; i++) {
1314 			flags[i] = TRUE;
1315 		}
1316 		if (rekichu_f_string != NULL) {
1317 			p = rekichu_f_string;
1318 			for (i = 0; *p != '\0' && i < MAX_REKICHU; i++, p++) {
1319 				if (*p != '1') {
1320 					flags[i] = FALSE;
1321 				}
1322 			}
1323 		}
1324 		for (i = 0; i < MAX_REKICHU; i++) {
1325 			CheckDlgButton(hDlg, IDC_REKICHU_0001 + i, flags[i]);
1326 		}
1327 		return (TRUE);
1328 	case WM_COMMAND:
1329 		switch (HIWORD(wParam)) {
1330 		case BN_CLICKED:
1331 			if (LOWORD(wParam) == IDC_REKICHU_0002) {
1332 				bRekichu_Kadan = (IsDlgButtonChecked(hDlg, IDC_REKICHU_0002) == 1) ? TRUE : FALSE;
1333 				return (TRUE);
1334 			}
1335 		}
1336 		break;
1337 	case WM_NOTIFY:
1338 		switch (((NMHDR *)lParam)->code) {
1339 		case PSN_APPLY:
1340 			p = malloc(sizeof(char) * MAX_REKICHU + 1);
1341 			if (p != NULL) {
1342 				for (i = 0; i < MAX_REKICHU; i++) {
1343 					if (IsDlgButtonChecked(hDlg, IDC_REKICHU_0001 + i) == 1) {
1344 						ch = '1';
1345 					} else {
1346 						ch = '0';
1347 					}
1348 					p[i] = ch;
1349 				}
1350 				p[i] = '\0';
1351 				if (rekichu_f_string == NULL) {
1352 					rekichu_f_string = p;
1353 					bChange = TRUE;
1354 				} else if (strcmp(rekichu_f_string, p) != 0) {
1355 					free(rekichu_f_string);
1356 					rekichu_f_string = p;
1357 					bChange = TRUE;
1358 				} else {
1359 					free(p);
1360 				}
1361 			}
1362 			return (TRUE);
1363 		}
1364 		break;
1365 	case WM_HELP:
1366 		commonHelpControl(propHelpID, (LPHELPINFO)lParam);
1367 		return (TRUE);
1368 	}
1369 
1370 	return (FALSE);
1371 }
1372 
kadanTabProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)1373 LRESULT CALLBACK kadanTabProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
1374 {
1375 	static const unsigned char	used_bitmap[(MAX_REKICHU_KADAN + 7) / 8] = { 0xFB, 0xF1, 0x3F };
1376 	char	*p;
1377 	char	ch;
1378 	int		i;
1379 	int		flags[MAX_REKICHU_KADAN];
1380 
1381 	switch (iMessage) {
1382 	case WM_INITDIALOG:
1383 		for (i = 0; i < MAX_REKICHU_KADAN; i++) {
1384 			flags[i] = TRUE;
1385 		}
1386 		if (rekichu_kadan_f_string != NULL) {
1387 			p = rekichu_kadan_f_string;
1388 			for (i = 0; *p != '\0' && i < MAX_REKICHU_KADAN; i++, p++) {
1389 				if (*p != '1') {
1390 					flags[i] = FALSE;
1391 				}
1392 			}
1393 		}
1394 		for (i = 0; i < MAX_REKICHU_KADAN; i++) {
1395 			CheckDlgButton(hDlg, IDC_KADAN_0001 + i, flags[i]);
1396 			if (bRekichu_Kadan == FALSE) {
1397 				EnableWindow(GetDlgItem(hDlg, IDC_KADAN_0001 + i), FALSE);
1398 			}
1399 		}
1400 		return (TRUE);
1401 	case WM_NOTIFY:
1402 		switch (((NMHDR *)lParam)->code) {
1403 		case PSN_SETACTIVE:
1404 			for (i = 0; i < MAX_REKICHU_KADAN; i++) {
1405 				EnableWindow(GetDlgItem(hDlg, IDC_KADAN_0001 + i), bRekichu_Kadan);
1406 			}
1407 			return (TRUE);
1408 		case PSN_APPLY:
1409 			p = malloc(sizeof(char) * MAX_REKICHU_KADAN + 1);
1410 			if (p != NULL) {
1411 				for (i = 0; i < MAX_REKICHU_KADAN; i++) {
1412 					if (CHKBIT(i, used_bitmap) == 0 || IsDlgButtonChecked(hDlg, IDC_KADAN_0001 + i) == 1) {
1413 						ch = '1';
1414 					} else {
1415 						ch = '0';
1416 					}
1417 					p[i] = ch;
1418 				}
1419 				p[i] = '\0';
1420 				if (rekichu_kadan_f_string == NULL) {
1421 					rekichu_kadan_f_string = p;
1422 					bChange = TRUE;
1423 				} else if (strcmp(rekichu_kadan_f_string, p) != 0) {
1424 					free(rekichu_kadan_f_string);
1425 					rekichu_kadan_f_string = p;
1426 					bChange = TRUE;
1427 				} else {
1428 					free(p);
1429 				}
1430 			}
1431 			return (TRUE);
1432 		}
1433 		break;
1434 	case WM_HELP:
1435 		commonHelpControl(propHelpID, (LPHELPINFO)lParam);
1436 		return (TRUE);
1437 	}
1438 
1439 	return (FALSE);
1440 }
1441 
setupPropertyProc(HWND hWnd,HINSTANCE hInstance,BOOL * bChangeDisplay)1442 BOOL setupPropertyProc(HWND hWnd, HINSTANCE hInstance, BOOL *bChangeDisplay)
1443 {
1444 	static const struct PROP_TAB_TBL	prop_tbl[MAX_SHEET] = {
1445 		{ IDD_TAB_DATE,     (DLGPROC)dateTabProc     },
1446 		{ IDD_TAB_EVENT,    (DLGPROC)eventTabProc    },
1447 		{ IDD_TAB_LEVEL,    (DLGPROC)levelTabProc    },
1448 		{ IDD_TAB_REKICHU,  (DLGPROC)rekichuTabProc  },
1449 		{ IDD_TAB_KADAN,    (DLGPROC)kadanTabProc    },
1450 		{ IDD_TAB_BIRTHDAY, (DLGPROC)birthdayTabProc },
1451 		{ IDD_TAB_HISTORY,  (DLGPROC)historyTabProc  },
1452 		{ IDD_TAB_SCHEDULE, (DLGPROC)scheduleTabProc },
1453 		{ IDD_TAB_DISPLAY,  (DLGPROC)displayTabProc  },
1454 		{ IDD_TAB_SCREEN,   (DLGPROC)screenTabProc   },
1455 		{ IDD_TAB_FILE,     (DLGPROC)fileTabProc     },
1456 	};
1457 	PROPSHEETPAGE	psp[MAX_SHEET];
1458 	PROPSHEETHEADER	psh;
1459 	HDC	hdc;
1460 	int	i;
1461 
1462 	memset(psp, '\0', sizeof(psp));
1463 
1464 	for (i = 0; i < MAX_SHEET; i++) {
1465 		psp[i].dwSize = sizeof(PROPSHEETPAGE);
1466 		psp[i].dwFlags = PSP_DEFAULT;
1467 		psp[i].hInstance = hInstance;
1468 		psp[i].u.pszTemplate = MAKEINTRESOURCE(prop_tbl[i].iResID);
1469 		psp[i].pfnDlgProc = prop_tbl[i].DlgProc;
1470 	}
1471 
1472 	memset(&psh, '\0', sizeof(psh));
1473 	psh.dwSize = sizeof(PROPSHEETHEADER);
1474 	psh.dwFlags = PSH_PROPSHEETPAGE | PSH_PROPTITLE | PSH_NOAPPLYNOW;
1475 	psh.hwndParent = hWnd;
1476 	psh.hInstance = hInstance;
1477 	psh.pszCaption = (LPSTR)szAppName;
1478 	psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
1479 	psh.u2.nStartPage = 8;
1480 	psh.u3.ppsp = (LPCPROPSHEETPAGE)&psp;
1481 
1482 	hdc = GetDC(hWnd);
1483 	hfontPreview = CreateFont(-MulDiv(9, GetDeviceCaps(hdc, LOGPIXELSY), 72), 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "�ͣ� �����å�");
1484 	ReleaseDC(hWnd, hdc);
1485 
1486 	ghInstance = hInstance;
1487 
1488 	bChange = FALSE;
1489 	if (rekichu_f_string == NULL || strlen(rekichu_f_string) < 2 || rekichu_f_string[1] == '1') {
1490 		bRekichu_Kadan = TRUE;
1491 	} else {
1492 		bRekichu_Kadan = FALSE;
1493 	}
1494 	bChangeDisplayParam = FALSE;
1495 
1496 	PropertySheet(&psh);
1497 
1498 	*bChangeDisplay = bChangeDisplayParam;
1499 
1500 	if (hfontPreview) {
1501 		DeleteObject(hfontPreview);
1502 	}
1503 	deleteLevelList();
1504 
1505 	return (bChange);
1506 }
1507