1 /*****************************************************************************/
2 /* EyeClock - A clock application for X. The eyes follow the mouse pointer.  */
3 /*                                                                           */
4 /* EyeClock Copyright (C) 1998-1999 Sakai Hiroaki.                           */
5 /* All Rights Reserved.                                                      */
6 /*                                                                           */
7 /* EyeClock is a simple clock application for X11. You can put your favorite */
8 /* picture on the face of the clock. And you can move the eyes of the        */
9 /* picture following the mouse pointer.                                      */
10 /*                                                                           */
11 /* This file is a part of EyeClock.                                          */
12 /* EyeClock is FREE SOFTWARE. You can use, copy, modify, and/or redistribute */
13 /* it freely under the terms in the COPYRIGHT.                               */
14 /* See the COPYRIGHT for more details.                                       */
15 /*****************************************************************************/
16 
17 /*****************************************************************************/
18 /* Clock ���������åȤ����Ѥ��뤿��Υᥤ��ե졼��                          */
19 /*===========================================================================*/
20 /* EyeClock �� Clock ���������åȤȤ����߷פ��Ƥ���Τǡ�                    */
21 /* ���ץꥱ���������Ǥ�դ���ʬ�˥��������åȤȤ���ĥ���դ��뤳�Ȥ�        */
22 /* �Ǥ��ޤ���                                                                */
23 /* ���Υե�����Ǥϡ�Clock ���������åȤ�ĥ���դ��뤿���                    */
24 /* toplevel ���������åȤ�������������� Clock ���������åȤ�ĥ���դ���      */
25 /* ClockStart() �ǻ��פ������Ȥ���XtAppMainLoop() ��ƤӽФ��Ƥ��ޤ���     */
26 /*****************************************************************************/
27 
28 /*****************************************************************************/
29 /* ��������                                                                  */
30 /*****************************************************************************/
31 
32 /*****************************************************************************/
33 /* �إå��ե�����Υ����롼��                                              */
34 /*****************************************************************************/
35 
36 #include <X11/Xlib.h>
37 #include <X11/Intrinsic.h>
38 #include <X11/StringDefs.h>
39 #include <X11/Shell.h>
40 #include <X11/Xatom.h>
41 
42 #include <stdio.h>
43 #include <stdlib.h>
44 #include <signal.h>
45 
46 #include "Clock.h"
47 #include "Hand.h"
48 #include "Number.h"
49 #include "Eye.h"
50 
51 #include "converter.h"
52 #include "etc.h"
53 
54 #include "fallback_resources.h"
55 
56 #include "xpm/default_icon_face.xpm"
57 
58 /*****************************************************************************/
59 /* ��������                                                                */
60 /*****************************************************************************/
61 
62 /* None */
63 
64 /*****************************************************************************/
65 /* �������                                                                  */
66 /*****************************************************************************/
67 
68 /* None */
69 
70 /*****************************************************************************/
71 /* �����ѿ������                                                            */
72 /*****************************************************************************/
73 
74 /*===========================================================================*/
75 /* Toplevel �Υ��������å�                                                   */
76 /*===========================================================================*/
77 
78 static Widget toplevel = 0;
79 static Widget myclock = 0;
80 
81 /*===========================================================================*/
82 /* Number ���������åȤΥ��������åȤ��Ȥ�̾��                               */
83 /*===========================================================================*/
84 
85 static struct {
86   char * name;
87   int number;
88 } numbers_default_values[] = {
89   {"number1" ,  1}, {"number2" ,  2}, {"number3" ,  3}, {"number4" ,  4},
90   {"number5" ,  5}, {"number6" ,  6}, {"number7" ,  7}, {"number8" ,  8},
91   {"number9" ,  9}, {"number10", 10}, {"number11", 11}, {"number12", 12},
92   {NULL, 0}
93 };
94 
95 /*===========================================================================*/
96 /* Hand ���������åȤΥ��������åȤ��Ȥ�̾��                                 */
97 /*===========================================================================*/
98 
99 static struct {
100   char * name;
101   HandType type;
102 } hands_default_values[] = {
103   {"hour"  , HOUR_HAND},
104   {"minute", MINUTE_HAND},
105   {"second", SECOND_HAND},
106   {NULL, OTHER_TYPE}
107 };
108 
109 /*===========================================================================*/
110 /* Eye ���������åȤΥ��������åȤ��Ȥ�̾��                                  */
111 /*===========================================================================*/
112 
113 static char * eyes_name[] = {
114   "left", "right", "eye3", "eye4", "eye5", "eye6", "eye7", "eye8", NULL};
115 
116 /*===========================================================================*/
117 /* ���ץ��������                                                          */
118 /*===========================================================================*/
119 
120 static XrmOptionDescRec options[] = {
121 
122   {"-icon-pixmap",        "*iconPixmap",               XrmoptionSepArg, NULL},
123   {"-icon-mask",          "*iconMask",                 XrmoptionSepArg, NULL},
124 
125   /* Clock ���������å��ѤΥ��ץ���� */
126 
127   {"-clock-geometry",     "*clock.geometry",           XrmoptionSepArg, NULL},
128   {"-root",               "*clock.root",               XrmoptionNoArg,"True"},
129   {"-no-root",            "*clock.root",               XrmoptionNoArg,"False"},
130   {"-face",               "*clock.face",               XrmoptionSepArg, NULL},
131   {"-interval",           "*clock.interval",           XrmoptionSepArg, NULL},
132 
133   /* Hand ���������å��ѤΥ��ץ���� */
134 
135   {"-hands-geometry",     "*clock.Hand.geometry",      XrmoptionSepArg, NULL},
136   {"-hands-active",       "*clock.Hand.active",        XrmoptionNoArg,"True"},
137   {"-hands-no-active",    "*clock.Hand.active",        XrmoptionNoArg,"False"},
138   {"-hands-foreground",   "*clock.Hand.foreground",    XrmoptionSepArg, NULL},
139   {"-hands-fg",           "*clock.Hand.foreground",    XrmoptionSepArg, NULL},
140   {"-hands-bordercolor",  "*clock.Hand.borderColor",   XrmoptionSepArg, NULL},
141   {"-hands-bc",           "*clock.Hand.borderColor",   XrmoptionSepArg, NULL},
142   {"-hands-borderwidth",  "*clock.Hand.borderWidth",   XrmoptionSepArg, NULL},
143   {"-hands-bw",           "*clock.Hand.borderWidth",   XrmoptionSepArg, NULL},
144   {"-hands-width",        "*clock.Hand.width",         XrmoptionSepArg, NULL},
145   {"-hands-length",       "*clock.Hand.length",        XrmoptionSepArg, NULL},
146   {"-hands-type",         "*clock.Hand.type",          XrmoptionSepArg, NULL},
147 
148   {"-hour-geometry",      "*clock.hour.geometry",      XrmoptionSepArg, NULL},
149   {"-hour-active",        "*clock.hour.active",        XrmoptionNoArg,"True"},
150   {"-hour-no-active",     "*clock.hour.active",        XrmoptionNoArg,"False"},
151   {"-hour-foreground",    "*clock.hour.foreground",    XrmoptionSepArg, NULL},
152   {"-hour-fg",            "*clock.hour.foreground",    XrmoptionSepArg, NULL},
153   {"-hour-bordercolor",   "*clock.hour.borderColor",   XrmoptionSepArg, NULL},
154   {"-hour-bc",            "*clock.hour.borderColor",   XrmoptionSepArg, NULL},
155   {"-hour-borderwidth",   "*clock.hour.borderWidth",   XrmoptionSepArg, NULL},
156   {"-hour-bw",            "*clock.hour.borderWidth",   XrmoptionSepArg, NULL},
157   {"-hour-width",         "*clock.hour.width",         XrmoptionSepArg, NULL},
158   {"-hour-length",        "*clock.hour.length",        XrmoptionSepArg, NULL},
159   {"-hour-type",          "*clock.hour.type",          XrmoptionSepArg, NULL},
160 
161   {"-minute-geometry",    "*clock.minute.geometry",    XrmoptionSepArg, NULL},
162   {"-minute-active",      "*clock.minute.active",      XrmoptionNoArg,"True"},
163   {"-minute-no-active",   "*clock.minute.active",      XrmoptionNoArg,"False"},
164   {"-minute-foreground",  "*clock.minute.foreground",  XrmoptionSepArg, NULL},
165   {"-minute-fg",          "*clock.minute.foreground",  XrmoptionSepArg, NULL},
166   {"-minute-bordercolor", "*clock.minute.borderColor", XrmoptionSepArg, NULL},
167   {"-minute-bc",          "*clock.minute.borderColor", XrmoptionSepArg, NULL},
168   {"-minute-borderwidth", "*clock.minute.borderWidth", XrmoptionSepArg, NULL},
169   {"-minute-bw",          "*clock.minute.borderWidth", XrmoptionSepArg, NULL},
170   {"-minute-width",       "*clock.minute.width",       XrmoptionSepArg, NULL},
171   {"-minute-length",      "*clock.minute.length",      XrmoptionSepArg, NULL},
172   {"-minute-type",        "*clock.minute.type",        XrmoptionSepArg, NULL},
173 
174   {"-second-geometry",    "*clock.second.geometry",    XrmoptionSepArg, NULL},
175   {"-second-active",      "*clock.second.active",      XrmoptionNoArg,"True"},
176   {"-second-no-active",   "*clock.second.active",      XrmoptionNoArg,"False"},
177   {"-second-foreground",  "*clock.second.foreground",  XrmoptionSepArg, NULL},
178   {"-second-fg",          "*clock.second.foreground",  XrmoptionSepArg, NULL},
179   {"-second-bordercolor", "*clock.second.borderColor", XrmoptionSepArg, NULL},
180   {"-second-bc",          "*clock.second.borderColor", XrmoptionSepArg, NULL},
181   {"-second-borderwidth", "*clock.second.borderWidth", XrmoptionSepArg, NULL},
182   {"-second-bw",          "*clock.second.borderWidth", XrmoptionSepArg, NULL},
183   {"-second-width",       "*clock.second.width",       XrmoptionSepArg, NULL},
184   {"-second-length",      "*clock.second.length",      XrmoptionSepArg, NULL},
185   {"-second-type",        "*clock.second.type",        XrmoptionSepArg, NULL},
186 
187   /* Number ���������å��ѤΥ��ץ���� */
188 
189   {"-numbers-geometry",   "*clock.Number.geometry",    XrmoptionSepArg, NULL},
190   {"-numbers-active",     "*clock.Number.active",      XrmoptionNoArg,"True"},
191   {"-numbers-no-active",  "*clock.Number.active",      XrmoptionNoArg,"False"},
192   {"-numbers-length",     "*clock.Number.length",      XrmoptionSepArg, NULL},
193   {"-numbers-figure",     "*clock.Number.figure",      XrmoptionSepArg, NULL},
194   {"-numbers-mask",       "*clock.Number.mask",        XrmoptionSepArg, NULL},
195   {"-numbers-size",       "*clock.Number.size",        XrmoptionSepArg, NULL},
196   {"-numbers-number",     "*clock.Number.number",      XrmoptionSepArg, NULL},
197 
198   {"-number1-geometry",   "*clock.number1.geometry",   XrmoptionSepArg, NULL},
199   {"-number1-active",     "*clock.number1.active",     XrmoptionNoArg,"True"},
200   {"-number1-no-active",  "*clock.number1.active",     XrmoptionNoArg,"False"},
201   {"-number1-length",     "*clock.number1.length",     XrmoptionSepArg, NULL},
202   {"-number1-figure",     "*clock.number1.figure",     XrmoptionSepArg, NULL},
203   {"-number1-mask",       "*clock.number1.mask",       XrmoptionSepArg, NULL},
204   {"-number1-size",       "*clock.number1.size",       XrmoptionSepArg, NULL},
205   {"-number1-number",     "*clock.number1.number",     XrmoptionSepArg, NULL},
206 
207   {"-number2-geometry",   "*clock.number2.geometry",   XrmoptionSepArg, NULL},
208   {"-number2-active",     "*clock.number2.active",     XrmoptionNoArg,"True"},
209   {"-number2-no-active",  "*clock.number2.active",     XrmoptionNoArg,"False"},
210   {"-number2-length",     "*clock.number2.length",     XrmoptionSepArg, NULL},
211   {"-number2-figure",     "*clock.number2.figure",     XrmoptionSepArg, NULL},
212   {"-number2-mask",       "*clock.number2.mask",       XrmoptionSepArg, NULL},
213   {"-number2-size",       "*clock.number2.size",       XrmoptionSepArg, NULL},
214   {"-number2-number",     "*clock.number2.number",     XrmoptionSepArg, NULL},
215 
216   {"-number3-geometry",   "*clock.number3.geometry",   XrmoptionSepArg, NULL},
217   {"-number3-active",     "*clock.number3.active",     XrmoptionNoArg,"True"},
218   {"-number3-no-active",  "*clock.number3.active",     XrmoptionNoArg,"False"},
219   {"-number3-length",     "*clock.number3.length",     XrmoptionSepArg, NULL},
220   {"-number3-figure",     "*clock.number3.figure",     XrmoptionSepArg, NULL},
221   {"-number3-mask",       "*clock.number3.mask",       XrmoptionSepArg, NULL},
222   {"-number3-size",       "*clock.number3.size",       XrmoptionSepArg, NULL},
223   {"-number3-number",     "*clock.number3.number",     XrmoptionSepArg, NULL},
224 
225   {"-number4-geometry",   "*clock.number4.geometry",   XrmoptionSepArg, NULL},
226   {"-number4-active",     "*clock.number4.active",     XrmoptionNoArg,"True"},
227   {"-number4-no-active",  "*clock.number4.active",     XrmoptionNoArg,"False"},
228   {"-number4-length",     "*clock.number4.length",     XrmoptionSepArg, NULL},
229   {"-number4-figure",     "*clock.number4.figure",     XrmoptionSepArg, NULL},
230   {"-number4-mask",       "*clock.number4.mask",       XrmoptionSepArg, NULL},
231   {"-number4-size",       "*clock.number4.size",       XrmoptionSepArg, NULL},
232   {"-number4-number",     "*clock.number4.number",     XrmoptionSepArg, NULL},
233 
234   {"-number5-geometry",   "*clock.number5.geometry",   XrmoptionSepArg, NULL},
235   {"-number5-active",     "*clock.number5.active",     XrmoptionNoArg,"True"},
236   {"-number5-no-active",  "*clock.number5.active",     XrmoptionNoArg,"False"},
237   {"-number5-length",     "*clock.number5.length",     XrmoptionSepArg, NULL},
238   {"-number5-figure",     "*clock.number5.figure",     XrmoptionSepArg, NULL},
239   {"-number5-mask",       "*clock.number5.mask",       XrmoptionSepArg, NULL},
240   {"-number5-size",       "*clock.number5.size",       XrmoptionSepArg, NULL},
241   {"-number5-number",     "*clock.number5.number",     XrmoptionSepArg, NULL},
242 
243   {"-number6-geometry",   "*clock.number6.geometry",   XrmoptionSepArg, NULL},
244   {"-number6-active",     "*clock.number6.active",     XrmoptionNoArg,"True"},
245   {"-number6-no-active",  "*clock.number6.active",     XrmoptionNoArg,"False"},
246   {"-number6-length",     "*clock.number6.length",     XrmoptionSepArg, NULL},
247   {"-number6-figure",     "*clock.number6.figure",     XrmoptionSepArg, NULL},
248   {"-number6-mask",       "*clock.number6.mask",       XrmoptionSepArg, NULL},
249   {"-number6-size",       "*clock.number6.size",       XrmoptionSepArg, NULL},
250   {"-number6-number",     "*clock.number6.number",     XrmoptionSepArg, NULL},
251 
252   {"-number7-geometry",   "*clock.number7.geometry",   XrmoptionSepArg, NULL},
253   {"-number7-active",     "*clock.number7.active",     XrmoptionNoArg,"True"},
254   {"-number7-no-active",  "*clock.number7.active",     XrmoptionNoArg,"False"},
255   {"-number7-length",     "*clock.number7.length",     XrmoptionSepArg, NULL},
256   {"-number7-figure",     "*clock.number7.figure",     XrmoptionSepArg, NULL},
257   {"-number7-mask",       "*clock.number7.mask",       XrmoptionSepArg, NULL},
258   {"-number7-size",       "*clock.number7.size",       XrmoptionSepArg, NULL},
259   {"-number7-number",     "*clock.number7.number",     XrmoptionSepArg, NULL},
260 
261   {"-number8-geometry",   "*clock.number8.geometry",    XrmoptionSepArg, NULL},
262   {"-number8-active",     "*clock.number8.active",     XrmoptionNoArg,"True"},
263   {"-number8-no-active",  "*clock.number8.active",     XrmoptionNoArg,"False"},
264   {"-number8-length",     "*clock.number8.length",     XrmoptionSepArg, NULL},
265   {"-number8-figure",     "*clock.number8.figure",     XrmoptionSepArg, NULL},
266   {"-number8-mask",       "*clock.number8.mask",       XrmoptionSepArg, NULL},
267   {"-number8-size",       "*clock.number8.size",       XrmoptionSepArg, NULL},
268   {"-number8-number",     "*clock.number8.number",     XrmoptionSepArg, NULL},
269 
270   {"-number9-geometry",   "*clock.number9.geometry",   XrmoptionSepArg, NULL},
271   {"-number9-active",     "*clock.number9.active",     XrmoptionNoArg,"True"},
272   {"-number9-no-active",  "*clock.number9.active",     XrmoptionNoArg,"False"},
273   {"-number9-length",     "*clock.number9.length",     XrmoptionSepArg, NULL},
274   {"-number9-figure",     "*clock.number9.figure",     XrmoptionSepArg, NULL},
275   {"-number9-mask",       "*clock.number9.mask",       XrmoptionSepArg, NULL},
276   {"-number9-size",       "*clock.number9.size",       XrmoptionSepArg, NULL},
277   {"-number9-number",     "*clock.number9.number",     XrmoptionSepArg, NULL},
278 
279   {"-number10-geometry",  "*clock.number10.geometry",  XrmoptionSepArg, NULL},
280   {"-number10-active",    "*clock.number10.active",    XrmoptionNoArg,"True"},
281   {"-number10-no-active", "*clock.number10.active",    XrmoptionNoArg,"False"},
282   {"-number10-length",    "*clock.number10.length",    XrmoptionSepArg, NULL},
283   {"-number10-figure",    "*clock.number10.figure",    XrmoptionSepArg, NULL},
284   {"-number10-mask",      "*clock.number10.mask",      XrmoptionSepArg, NULL},
285   {"-number10-size",      "*clock.number10.size",      XrmoptionSepArg, NULL},
286   {"-number10-number",    "*clock.number10.number",    XrmoptionSepArg, NULL},
287 
288   {"-number11-geometry",  "*clock.number11.geometry",  XrmoptionSepArg, NULL},
289   {"-number11-active",    "*clock.number11.active",    XrmoptionNoArg,"True"},
290   {"-number11-no-active", "*clock.number11.active",    XrmoptionNoArg,"False"},
291   {"-number11-length",    "*clock.number11.length",    XrmoptionSepArg, NULL},
292   {"-number11-figure",    "*clock.number11.figure",    XrmoptionSepArg, NULL},
293   {"-number11-mask",      "*clock.number11.mask",      XrmoptionSepArg, NULL},
294   {"-number11-size",      "*clock.number11.size",      XrmoptionSepArg, NULL},
295   {"-number11-number",    "*clock.number11.number",    XrmoptionSepArg, NULL},
296 
297   {"-number12-geometry",  "*clock.number12.geometry",  XrmoptionSepArg, NULL},
298   {"-number12-active",    "*clock.number12.active",    XrmoptionNoArg,"True"},
299   {"-number12-no-active", "*clock.number12.active",    XrmoptionNoArg,"False"},
300   {"-number12-length",    "*clock.number12.length",    XrmoptionSepArg, NULL},
301   {"-number12-figure",    "*clock.number12.figure",    XrmoptionSepArg, NULL},
302   {"-number12-mask",      "*clock.number12.mask",      XrmoptionSepArg, NULL},
303   {"-number12-size",      "*clock.number12.size",      XrmoptionSepArg, NULL},
304   {"-number12-number",    "*clock.number12.number",    XrmoptionSepArg, NULL},
305 
306   /* Eye ���������å��ѤΥ��ץ���� */
307 
308   {"-eyes-geometry",        "*clock.Eye.geometry",     XrmoptionSepArg, NULL},
309   {"-eyes-active",          "*clock.Eye.active",       XrmoptionNoArg,"True"},
310   {"-eyes-no-active",       "*clock.Eye.active",       XrmoptionNoArg,"False"},
311   {"-eyes-fill-color",      "*clock.Eye.fillColor",    XrmoptionNoArg,"True"},
312   {"-eyes-no-fill-color",   "*clock.Eye.fillColor",    XrmoptionNoArg,"False"},
313   {"-eyes-fill-pixmap",     "*clock.Eye.fillPixmap",   XrmoptionNoArg,"True"},
314   {"-eyes-no-fill-pixmap",  "*clock.Eye.fillPixmap",   XrmoptionNoArg,"False"},
315   {"-eyes-background",      "*clock.Eye.background",   XrmoptionSepArg, NULL},
316   {"-eyes-bg",              "*clock.Eye.background",   XrmoptionSepArg, NULL},
317   {"-eyes-move",            "*clock.Eye.move",         XrmoptionSepArg, NULL},
318   {"-eyes-limit",           "*clock.Eye.limit",        XrmoptionSepArg, NULL},
319   {"-eyes-offset",          "*clock.Eye.offset",       XrmoptionSepArg, NULL},
320   {"-eyes-core-figure",     "*clock.Eye.coreFigure",   XrmoptionSepArg, NULL},
321   {"-eyes-core-mask",       "*clock.Eye.coreMask",     XrmoptionSepArg, NULL},
322   {"-eyes-eye-figure",      "*clock.Eye.eyeFigure",    XrmoptionSepArg, NULL},
323   {"-eyes-eye-mask",        "*clock.Eye.eyeMask",      XrmoptionSepArg, NULL},
324   {"-eyes-core-size",       "*clock.Eye.coreSize",     XrmoptionSepArg, NULL},
325   {"-eyes-eye-size",        "*clock.Eye.eyeSize",      XrmoptionSepArg, NULL},
326 
327   {"-left-geometry",        "*clock.left.geometry",    XrmoptionSepArg, NULL},
328   {"-left-active",          "*clock.left.active",      XrmoptionNoArg,"True"},
329   {"-left-no-active",       "*clock.left.active",      XrmoptionNoArg,"False"},
330   {"-left-fill-color",      "*clock.left.fillColor",   XrmoptionNoArg,"True"},
331   {"-left-no-fill-color",   "*clock.left.fillColor",   XrmoptionNoArg,"False"},
332   {"-left-fill-pixmap",     "*clock.left.fillPixmap",  XrmoptionNoArg,"True"},
333   {"-left-no-fill-pixmap",  "*clock.left.fillPixmap",  XrmoptionNoArg,"False"},
334   {"-left-background",      "*clock.left.background",  XrmoptionSepArg, NULL},
335   {"-left-bg",              "*clock.left.background",  XrmoptionSepArg, NULL},
336   {"-left-move",            "*clock.left.move",        XrmoptionSepArg, NULL},
337   {"-left-limit",           "*clock.left.limit",       XrmoptionSepArg, NULL},
338   {"-left-offset",          "*clock.left.offset",      XrmoptionSepArg, NULL},
339   {"-left-core-figure",     "*clock.left.coreFigure",  XrmoptionSepArg, NULL},
340   {"-left-core-mask",       "*clock.left.coreMask",    XrmoptionSepArg, NULL},
341   {"-left-eye-figure",      "*clock.left.eyeFigure",   XrmoptionSepArg, NULL},
342   {"-left-eye-mask",        "*clock.left.eyeMask",     XrmoptionSepArg, NULL},
343   {"-left-core-size",       "*clock.left.coreSize",    XrmoptionSepArg, NULL},
344   {"-left-eye-size",        "*clock.left.eyeSize",     XrmoptionSepArg, NULL},
345 
346   {"-right-geometry",       "*clock.right.geometry",   XrmoptionSepArg, NULL},
347   {"-right-active",         "*clock.right.active",     XrmoptionNoArg,"True"},
348   {"-right-no-active",      "*clock.right.active",     XrmoptionNoArg,"False"},
349   {"-right-fill-color",     "*clock.right.fillColor",  XrmoptionNoArg,"True"},
350   {"-right-no-fill-color",  "*clock.right.fillColor",  XrmoptionNoArg,"False"},
351   {"-right-fill-pixmap",    "*clock.right.fillPixmap", XrmoptionNoArg,"True"},
352   {"-right-no-fill-pixmap", "*clock.right.fillPixmap", XrmoptionNoArg,"False"},
353   {"-right-background",     "*clock.right.background", XrmoptionSepArg, NULL},
354   {"-right-bg",             "*clock.right.background", XrmoptionSepArg, NULL},
355   {"-right-move",           "*clock.right.move",       XrmoptionSepArg, NULL},
356   {"-right-limit",          "*clock.right.limit",      XrmoptionSepArg, NULL},
357   {"-right-offset",         "*clock.right.offset",     XrmoptionSepArg, NULL},
358   {"-right-core-figure",    "*clock.right.coreFigure", XrmoptionSepArg, NULL},
359   {"-right-core-mask",      "*clock.right.coreMask",   XrmoptionSepArg, NULL},
360   {"-right-eye-figure",     "*clock.right.eyeFigure",  XrmoptionSepArg, NULL},
361   {"-right-eye-mask",       "*clock.right.eyeMask",    XrmoptionSepArg, NULL},
362   {"-right-core-size",      "*clock.right.coreSize",   XrmoptionSepArg, NULL},
363   {"-right-eye-size",       "*clock.right.eyeSize",    XrmoptionSepArg, NULL},
364 
365   {"-eye3-geometry",        "*clock.eye3.geometry",    XrmoptionSepArg, NULL},
366   {"-eye3-active",          "*clock.eye3.active",      XrmoptionNoArg,"True"},
367   {"-eye3-no-active",       "*clock.eye3.active",      XrmoptionNoArg,"False"},
368   {"-eye3-fill-color",      "*clock.eye3.fillColor",   XrmoptionNoArg,"True"},
369   {"-eye3-no-fill-color",   "*clock.eye3.fillColor",   XrmoptionNoArg,"False"},
370   {"-eye3-fill-pixmap",     "*clock.eye3.fillPixmap" , XrmoptionNoArg,"True"},
371   {"-eye3-no-fill-pixmap",  "*clock.eye3.fillPixmap",  XrmoptionNoArg,"False"},
372   {"-eye3-background",      "*clock.eye3.background",  XrmoptionSepArg, NULL},
373   {"-eye3-bg",              "*clock.eye3.background",  XrmoptionSepArg, NULL},
374   {"-eye3-move",            "*clock.eye3.move",        XrmoptionSepArg, NULL},
375   {"-eye3-limit",           "*clock.eye3.limit",       XrmoptionSepArg, NULL},
376   {"-eye3-offset",          "*clock.eye3.offset",      XrmoptionSepArg, NULL},
377   {"-eye3-core-figure",     "*clock.eye3.coreFigure",  XrmoptionSepArg, NULL},
378   {"-eye3-core-mask",       "*clock.eye3.coreMask",    XrmoptionSepArg, NULL},
379   {"-eye3-eye-figure",      "*clock.eye3.eyeFigure",   XrmoptionSepArg, NULL},
380   {"-eye3-eye-mask",        "*clock.eye3.eyeMask",     XrmoptionSepArg, NULL},
381   {"-eye3-core-size",       "*clock.eye3.coreSize",    XrmoptionSepArg, NULL},
382   {"-eye3-eye-size",        "*clock.eye3.eyeSize",     XrmoptionSepArg, NULL},
383 
384   {"-eye4-geometry",        "*clock.eye4.geometry",    XrmoptionSepArg, NULL},
385   {"-eye4-active",          "*clock.eye4.active",      XrmoptionNoArg,"True"},
386   {"-eye4-no-active",       "*clock.eye4.active",      XrmoptionNoArg,"False"},
387   {"-eye4-fill-color",      "*clock.eye4.fillColor",   XrmoptionNoArg,"True"},
388   {"-eye4-no-fill-color",   "*clock.eye4.fillColor",   XrmoptionNoArg,"False"},
389   {"-eye4-fill-pixmap",     "*clock.eye4.fillPixmap" , XrmoptionNoArg,"True"},
390   {"-eye4-no-fill-pixmap",  "*clock.eye4.fillPixmap",  XrmoptionNoArg,"False"},
391   {"-eye4-background",      "*clock.eye4.background",  XrmoptionSepArg, NULL},
392   {"-eye4-bg",              "*clock.eye4.background",  XrmoptionSepArg, NULL},
393   {"-eye4-move",            "*clock.eye4.move",        XrmoptionSepArg, NULL},
394   {"-eye4-limit",           "*clock.eye4.limit",       XrmoptionSepArg, NULL},
395   {"-eye4-offset",          "*clock.eye4.offset",      XrmoptionSepArg, NULL},
396   {"-eye4-core-figure",     "*clock.eye4.coreFigure",  XrmoptionSepArg, NULL},
397   {"-eye4-core-mask",       "*clock.eye4.coreMask",    XrmoptionSepArg, NULL},
398   {"-eye4-eye-figure",      "*clock.eye4.eyeFigure",   XrmoptionSepArg, NULL},
399   {"-eye4-eye-mask",        "*clock.eye4.eyeMask",     XrmoptionSepArg, NULL},
400   {"-eye4-core-size",       "*clock.eye4.coreSize",    XrmoptionSepArg, NULL},
401   {"-eye4-eye-size",        "*clock.eye4.eyeSize",     XrmoptionSepArg, NULL},
402 
403   {"-eye5-geometry",        "*clock.eye5.geometry",    XrmoptionSepArg, NULL},
404   {"-eye5-active",          "*clock.eye5.active",      XrmoptionNoArg,"True"},
405   {"-eye5-no-active",       "*clock.eye5.active",      XrmoptionNoArg,"False"},
406   {"-eye5-fill-color",      "*clock.eye5.fillColor",   XrmoptionNoArg,"True"},
407   {"-eye5-no-fill-color",   "*clock.eye5.fillColor",   XrmoptionNoArg,"False"},
408   {"-eye5-fill-pixmap",     "*clock.eye5.fillPixmap" , XrmoptionNoArg,"True"},
409   {"-eye5-no-fill-pixmap",  "*clock.eye5.fillPixmap",  XrmoptionNoArg,"False"},
410   {"-eye5-background",      "*clock.eye5.background",  XrmoptionSepArg, NULL},
411   {"-eye5-bg",              "*clock.eye5.background",  XrmoptionSepArg, NULL},
412   {"-eye5-move",            "*clock.eye5.move",        XrmoptionSepArg, NULL},
413   {"-eye5-limit",           "*clock.eye5.limit",       XrmoptionSepArg, NULL},
414   {"-eye5-offset",          "*clock.eye5.offset",      XrmoptionSepArg, NULL},
415   {"-eye5-core-figure",     "*clock.eye5.coreFigure",  XrmoptionSepArg, NULL},
416   {"-eye5-core-mask",       "*clock.eye5.coreMask",    XrmoptionSepArg, NULL},
417   {"-eye5-eye-figure",      "*clock.eye5.eyeFigure",   XrmoptionSepArg, NULL},
418   {"-eye5-eye-mask",        "*clock.eye5.eyeMask",     XrmoptionSepArg, NULL},
419   {"-eye5-core-size",       "*clock.eye5.coreSize",    XrmoptionSepArg, NULL},
420   {"-eye5-eye-size",        "*clock.eye5.eyeSize",     XrmoptionSepArg, NULL},
421 
422   {"-eye6-geometry",        "*clock.eye6.geometry",    XrmoptionSepArg, NULL},
423   {"-eye6-active",          "*clock.eye6.active",      XrmoptionNoArg,"True"},
424   {"-eye6-no-active",       "*clock.eye6.active",      XrmoptionNoArg,"False"},
425   {"-eye6-fill-color",      "*clock.eye6.fillColor",   XrmoptionNoArg,"True"},
426   {"-eye6-no-fill-color",   "*clock.eye6.fillColor",   XrmoptionNoArg,"False"},
427   {"-eye6-fill-pixmap",     "*clock.eye6.fillPixmap" , XrmoptionNoArg,"True"},
428   {"-eye6-no-fill-pixmap",  "*clock.eye6.fillPixmap",  XrmoptionNoArg,"False"},
429   {"-eye6-background",      "*clock.eye6.background",  XrmoptionSepArg, NULL},
430   {"-eye6-bg",              "*clock.eye6.background",  XrmoptionSepArg, NULL},
431   {"-eye6-move",            "*clock.eye6.move",        XrmoptionSepArg, NULL},
432   {"-eye6-limit",           "*clock.eye6.limit",       XrmoptionSepArg, NULL},
433   {"-eye6-offset",          "*clock.eye6.offset",      XrmoptionSepArg, NULL},
434   {"-eye6-core-figure",     "*clock.eye6.coreFigure",  XrmoptionSepArg, NULL},
435   {"-eye6-core-mask",       "*clock.eye6.coreMask",    XrmoptionSepArg, NULL},
436   {"-eye6-eye-figure",      "*clock.eye6.eyeFigure",   XrmoptionSepArg, NULL},
437   {"-eye6-eye-mask",        "*clock.eye6.eyeMask",     XrmoptionSepArg, NULL},
438   {"-eye6-core-size",       "*clock.eye6.coreSize",    XrmoptionSepArg, NULL},
439   {"-eye6-eye-size",        "*clock.eye6.eyeSize",     XrmoptionSepArg, NULL},
440 
441   {"-eye7-geometry",        "*clock.eye7.geometry",    XrmoptionSepArg, NULL},
442   {"-eye7-active",          "*clock.eye7.active",      XrmoptionNoArg,"True"},
443   {"-eye7-no-active",       "*clock.eye7.active",      XrmoptionNoArg,"False"},
444   {"-eye7-fill-color",      "*clock.eye7.fillColor",   XrmoptionNoArg,"True"},
445   {"-eye7-no-fill-color",   "*clock.eye7.fillColor",   XrmoptionNoArg,"False"},
446   {"-eye7-fill-pixmap",     "*clock.eye7.fillPixmap" , XrmoptionNoArg,"True"},
447   {"-eye7-no-fill-pixmap",  "*clock.eye7.fillPixmap",  XrmoptionNoArg,"False"},
448   {"-eye7-background",      "*clock.eye7.background",  XrmoptionSepArg, NULL},
449   {"-eye7-bg",              "*clock.eye7.background",  XrmoptionSepArg, NULL},
450   {"-eye7-move",            "*clock.eye7.move",        XrmoptionSepArg, NULL},
451   {"-eye7-limit",           "*clock.eye7.limit",       XrmoptionSepArg, NULL},
452   {"-eye7-offset",          "*clock.eye7.offset",      XrmoptionSepArg, NULL},
453   {"-eye7-core-figure",     "*clock.eye7.coreFigure",  XrmoptionSepArg, NULL},
454   {"-eye7-core-mask",       "*clock.eye7.coreMask",    XrmoptionSepArg, NULL},
455   {"-eye7-eye-figure",      "*clock.eye7.eyeFigure",   XrmoptionSepArg, NULL},
456   {"-eye7-eye-mask",        "*clock.eye7.eyeMask",     XrmoptionSepArg, NULL},
457   {"-eye7-core-size",       "*clock.eye7.coreSize",    XrmoptionSepArg, NULL},
458   {"-eye7-eye-size",        "*clock.eye7.eyeSize",     XrmoptionSepArg, NULL},
459 
460   {"-eye8-geometry",        "*clock.eye8.geometry",    XrmoptionSepArg, NULL},
461   {"-eye8-active",          "*clock.eye8.active",      XrmoptionNoArg,"True"},
462   {"-eye8-no-active",       "*clock.eye8.active",      XrmoptionNoArg,"False"},
463   {"-eye8-fill-color",      "*clock.eye8.fillColor",   XrmoptionNoArg,"True"},
464   {"-eye8-no-fill-color",   "*clock.eye8.fillColor",   XrmoptionNoArg,"False"},
465   {"-eye8-fill-pixmap",     "*clock.eye8.fillPixmap" , XrmoptionNoArg,"True"},
466   {"-eye8-no-fill-pixmap",  "*clock.eye8.fillPixmap",  XrmoptionNoArg,"False"},
467   {"-eye8-background",      "*clock.eye8.background",  XrmoptionSepArg, NULL},
468   {"-eye8-bg",              "*clock.eye8.background",  XrmoptionSepArg, NULL},
469   {"-eye8-move",            "*clock.eye8.move",        XrmoptionSepArg, NULL},
470   {"-eye8-limit",           "*clock.eye8.limit",       XrmoptionSepArg, NULL},
471   {"-eye8-offset",          "*clock.eye8.offset",      XrmoptionSepArg, NULL},
472   {"-eye8-core-figure",     "*clock.eye8.coreFigure",  XrmoptionSepArg, NULL},
473   {"-eye8-core-mask",       "*clock.eye8.coreMask",    XrmoptionSepArg, NULL},
474   {"-eye8-eye-figure",      "*clock.eye8.eyeFigure",   XrmoptionSepArg, NULL},
475   {"-eye8-eye-mask",        "*clock.eye8.eyeMask",     XrmoptionSepArg, NULL},
476   {"-eye8-core-size",       "*clock.eye8.coreSize",    XrmoptionSepArg, NULL},
477   {"-eye8-eye-size",        "*clock.eye8.eyeSize",     XrmoptionSepArg, NULL}
478 };
479 
480 /*===========================================================================*/
481 /* ���ȥ�                                                                    */
482 /*===========================================================================*/
483 
484 static Atom wm_delete_window;
485 
486 /*===========================================================================*/
487 /* �������������                                                          */
488 /*===========================================================================*/
489 
490 static void quit(Widget w, XEvent * event, String * params, Cardinal * num);
491 static void wm_quit(Widget w, XEvent * event, String * params, Cardinal * num);
492 static void restore(Widget w, XEvent * event, String * params, Cardinal * num);
493 static void iconify(Widget w, XEvent * event, String * params, Cardinal * num);
494 
495 static XtActionsRec actions[] = {
496   {"quit", quit},
497   {"wm_quit", wm_quit},
498   {"iconify", iconify},
499   {"restore", restore}
500 };
501 
502 /*===========================================================================*/
503 /* �ȥ���졼���������                                                  */
504 /*===========================================================================*/
505 
506 static char * translations =
507 "<Message>WM_PROTOCOLS: wm_quit()\n"
508 "None<Key>r: restore()\n"
509 "None<Key>i: iconify()\n"
510 "Ctrl<Key>c: quit()\n"
511 "None<Key>q: quit()";
512 
513 /*===========================================================================*/
514 /* �إ��                                                                    */
515 /*===========================================================================*/
516 
517 static char * help_message =
518 "\n"
519 VERSION "\n"
520 "\n"
521 "EyeClock - A clock application for X. The eyes follow the mouse pointer.\n"
522 "\n"
523 "EyeClock Copyright (C) 1998-1999 Sakai Hiroaki.\n"
524 "All Rights Reserved.\n"
525 "\n"
526 "EyeClock is a simple clock application for X11. You can put your favorite\n"
527 "picture on the face of the clock. And you can move the eyes of the\n"
528 "picture following the mouse pointer.\n"
529 "\n"
530 "Usage:\n"
531 "\n"
532 "        eyeclock [options]\n"
533 "\n"
534 "Options:\n"
535 "\n"
536 "        (X Toolkit options)\n"
537 "\n"
538 "        -display [displayname]\n"
539 "        -geometry [WxH+X+Y]\n"
540 "        -title [titlename]\n"
541 "        -name [name]\n"
542 "        -background [color], -bg [color]\n"
543 "        -icon-pixmap [XPM file]\n"
544 "        -icon-mask [XPM file]\n"
545 "\n"
546 "        -clock-geometry [WxH+X+Y]\n"
547 "        -root\n"
548 "        -no-root\n"
549 "        -face [XPM file]\n"
550 "        -interval [milli seconds]\n"
551 "\n"
552 "        -hands-geometry [TxL+X+Y]\n"
553 "        -hands-active\n"
554 "        -hands-no-active\n"
555 "        -hands-foreground [color], -hands-fg [color]\n"
556 "        -hands-bordercolor [color], -hands-bc [color]\n"
557 "        -hands-borderwidth [x], -hands-bw [x]\n"
558 "        -hands-width [x]\n"
559 "        -hands-length [x]\n"
560 "\n"
561 "        Options like \"-hour-XXXXXXXX\", \"-minute-XXXXXXXX\", and,\n"
562 "        \"-second-XXXXXXXX\" are equal to above options. Option like\n"
563 "        \"-hands-XXXXXXXX\" effects all hands. Option like\n"
564 "        \"-hour-XXXXXXXX\" effects only hour hand.\n"
565 "\n"
566 "        -numbers-geometry [WxH+X+Y]\n"
567 "        -numbers-active\n"
568 "        -numbers-no-active\n"
569 "        -numbers-length [x]\n"
570 "        -numbers-figure [XPM file]\n"
571 "        -numbers-mask [XPM file]\n"
572 "        -numbers-size [WxH]\n"
573 "\n"
574 "        Options like \"-number1-XXXXXXXX\", \"-number2-XXXXXXXX\", ...,\n"
575 "        and, \"-number12-XXXXXXXX\" are equal to above options.\n"
576 "        Option like \"-numbers-XXXXXXXX\" effects all numbers.\n"
577 "        Option like \"-number1-XXXXXXXX\" effects only number 1.\n"
578 "\n"
579 "        -eyes-geometry [WxH+X+Y]\n"
580 "        -eyes-active\n"
581 "        -eyes-no-active\n"
582 "        -eyes-fill-color\n"
583 "        -eyes-no-fill-color\n"
584 "        -eyes-fill-pixmap\n"
585 "        -eyes-no-fill-pixmap\n"
586 "        -eyes-background [color], -eyes-bg [color]\n"
587 "        -eyes-move [XxY]\n"
588 "        -eyes-limit [XxY]\n"
589 "        -eyes-offset [XxY]\n"
590 "        -eyes-core-figure [XPM file]\n"
591 "        -eyes-core-mask [XPM file]\n"
592 "        -eyes-eye-figure [XPM file]\n"
593 "        -eyes-eye-mask [XPM file]\n"
594 "        -eyes-core-size [WxH]\n"
595 "        -eyes-eye-size [WxH]\n"
596 "\n"
597 "        Options like \"-left-XXXXXXXX\", \"-right-XXXXXXXX\",\n"
598 "        \"-eye3-XXXXXXXX\", ... , and, \"-eye8-XXXXXXXX\" are equal to\n"
599 "        above options. Option like \"-eyes-XXXXXXXX\" effects all\n"
600 "        eyes. Option like \"-left-XXXXXXXX\" effects only left eye.\n"
601 "\n"
602 "See \"man eyeclock\" for more details.\n"
603 "\n"
604 ;
605 
606 /*****************************************************************************/
607 /* �ؿ�������                                                                */
608 /*****************************************************************************/
609 
610 /*===========================================================================*/
611 /* ��λ����                                                                  */
612 /*===========================================================================*/
613 
die(Widget w)614 static void die(Widget w)
615 {
616   Display * display;
617   int i;
618 
619   if (myclock)
620     if (XtIsRealized(myclock))
621       ClockStop(myclock);
622 
623   if (toplevel)
624     if (XtIsRealized(toplevel)) {
625       display = XtDisplay(toplevel);
626       XtDestroyWidget(toplevel);
627       XCloseDisplay(display);
628     }
629 
630   exit(0);
631 }
632 
quit(Widget w,XEvent * event,String * params,Cardinal * num)633 static void quit(Widget w, XEvent * event, String * params, Cardinal * num)
634 {
635   die(w);
636 }
637 
wm_quit(Widget w,XEvent * event,String * params,Cardinal * num)638 static void wm_quit(Widget w, XEvent * event, String * params, Cardinal * num)
639 {
640   if ((event->type == ClientMessage) &&
641       (event->xclient.data.l[0] != wm_delete_window)) {
642     XBell(XtDisplay(w), 0);
643   } else {
644     die(w);
645   }
646 }
647 
restore(Widget w,XEvent * event,String * params,Cardinal * num)648 static void restore(Widget w, XEvent * event, String * params, Cardinal * num)
649 {
650   unsigned int width;
651   unsigned int height;
652 
653   width  = ClockGetFaceWidth(myclock);
654   height = ClockGetFaceHeight(myclock);
655 
656   if (width && height)
657     XtVaSetValues(toplevel, XtNwidth, width, XtNheight, height, NULL);
658 }
659 
iconify(Widget w,XEvent * event,String * params,Cardinal * num)660 static void iconify(Widget w, XEvent * event, String * params, Cardinal * num)
661 {
662   XIconifyWindow(XtDisplay(toplevel), XtWindow(toplevel),
663 		 DefaultScreen(XtDisplay(toplevel)));
664 }
665 
666 /*===========================================================================*/
667 /* Ctrl-c �ϥ�ɥ�                                                           */
668 /*===========================================================================*/
669 
interrupt_handler(int value)670 static void interrupt_handler(int value)
671 {
672   die(toplevel);
673 }
674 
675 /*===========================================================================*/
676 /* HUP �����ʥ�ϥ�ɥ�                                                      */
677 /*===========================================================================*/
678 
hup_handler(int value)679 static void hup_handler(int value)
680 {
681   XRaiseWindow(XtDisplay(toplevel), XtWindow(toplevel));
682 }
683 
684 /*===========================================================================*/
685 /* �إ��                                                                    */
686 /*===========================================================================*/
687 
help()688 static void help()
689 {
690   fprintf(stdout, "%s", help_message);
691   die(toplevel);
692 }
693 
694 /*===========================================================================*/
695 /* �ᥤ��                                                                    */
696 /*===========================================================================*/
697 
main(int argc,char * argv[])698 int main(int argc, char * argv[])
699 {
700   XtAppContext app_context;
701   Display * display;
702   Window root;
703   Pixmap pixmap;
704   Pixmap icon_face;
705   Pixmap icon_mask;
706   int i;
707 
708   /* �꥽����������С�������Ͽ */
709   XtSetTypeConverter(XtRString, XtRXPoint, ConvertStringToPoint,
710                      NULL, 0, XtCacheNone, NULL);
711   XtSetTypeConverter(XtRString, XtRBitmap, ConvertStringToPixmap,
712                      NULL, 0, XtCacheNone, NULL);
713   XtSetTypeConverter(XtRString, XtRPixmap, ConvertStringToPixmap,
714                      NULL, 0, XtCacheNone, NULL);
715   XtSetTypeConverter(XtRPixmapData, XtRPixmap, ConvertPixmapDataToPixmap,
716                      NULL, 0, XtCacheNone, NULL);
717   XtSetTypeConverter(XtRString, XtRWidgetCorePart,
718                      ConvertGeometryStringToPoint, NULL, 0,
719                      XtCacheNone, NULL);
720 
721   /* �ȥåץ�٥���������åȤκ��� */
722   toplevel = XtAppInitialize(&app_context, "EyeClock",
723 			     options, XtNumber(options),
724 			     &argc, argv, fallback_resources, NULL, 0);
725 
726   if (argc > 1) {
727     for (i = 1; i < argc; i++)
728       fprintf(stderr, "Unknown option : %s\n", argv[i]);
729     help();
730   }
731 
732   /* Clock ���������åȤκ��� */
733   myclock = XtCreateManagedWidget("clock", clockWidgetClass, toplevel, NULL, 0);
734 
735   /* Hand ���������åȤκ��� */
736   for (i = 0; hands_default_values[i].name; i++)
737     XtVaCreateManagedWidget(hands_default_values[i].name,
738 			    handWidgetClass, myclock,
739 			    XtNtype, hands_default_values[i].type, NULL);
740 
741   /* Number ���������åȤκ��� */
742   for (i = 0; numbers_default_values[i].name; i++)
743     XtVaCreateManagedWidget(numbers_default_values[i].name,
744 			    numberWidgetClass, myclock,
745 			    XtNnumber, numbers_default_values[i].number, NULL);
746 
747   /* Eye ���������åȤκ��� */
748   for (i = 0; eyes_name[i]; i++)
749     XtCreateManagedWidget(eyes_name[i], eyeWidgetClass, myclock, NULL, 0);
750 
751   /* �ݥ����Υե���������ͭ���ˤ��� */
752   XtVaSetValues(toplevel, XtNinput, True, NULL);
753 
754   display = XtDisplay(toplevel);
755   root = DefaultRootWindow(display);
756 
757   /* ������������� */
758   XtVaGetValues(toplevel, XtNiconPixmap, &icon_face, NULL);
759   if (icon_face == 0) {
760     icon_face = MakePixmapFromPixmapData(display, root, icon_face_xpm);
761     XtVaSetValues(toplevel, XtNiconPixmap, icon_face, NULL);
762   }
763 
764   /* ��������ޥ��������� */
765   XtVaGetValues(toplevel, XtNiconMask, &pixmap, NULL);
766   if (pixmap)
767     icon_mask = CreateInvertMaskBitmap(display, root, pixmap);
768   else
769     icon_mask = CreateInvertMaskBitmap(display, root, icon_face);
770   XtVaSetValues(toplevel, XtNiconMask, icon_mask, NULL);
771   if (pixmap)
772     XFreePixmap(display, pixmap);
773 
774   /* �������������� */
775   XtAppAddActions(app_context, actions, XtNumber(actions));
776 
777   /* �ȥ���졼���������� */
778   XtOverrideTranslations(toplevel, XtParseTranslationTable(translations));
779 
780   /* ���������åȤΥꥢ�饤�� */
781   XtRealizeWidget(toplevel);
782 
783   /* X �����Ф����������åȤ�ꥢ�饤������ޤ��Ԥ� */
784   while (!XtIsRealized(toplevel)) { /* None */ }
785 
786   /* ������ɥ��ޥ͡����㤫��� f.delete �ؤ��б� */
787   wm_delete_window = XInternAtom(display, "WM_DELETE_WINDOW", False);
788   XSetWMProtocols(display, XtWindow(toplevel), &wm_delete_window, 1);
789 
790   /* ���פ������Ȥ����� */
791   ClockStart(app_context, myclock);
792 
793   /* Ctrl-c �Υȥ�å� */
794   signal(SIGINT, interrupt_handler);
795 
796   /* HUP �����ʥ�Υȥ�å� */
797   signal(SIGHUP, hup_handler);
798 
799   /* �ᥤ��롼�� */
800   XtAppMainLoop(app_context);
801 }
802 
803 /*****************************************************************************/
804 /* �����ޤ�                                                                  */
805 /*****************************************************************************/
806 
807 /*****************************************************************************/
808 /* End of File.                                                              */
809 /*****************************************************************************/
810