|
|
1.1 root 1: #ifndef lint
2: static char rcs_id[] = "$Header: main.c,v 1.13 87/09/11 08:18:11 toddb Exp $";
3: #endif lint
4: /*
5: * COPYRIGHT 1987
6: * DIGITAL EQUIPMENT CORPORATION
7: * MAYNARD, MASSACHUSETTS
8: * ALL RIGHTS RESERVED.
9: *
10: * THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND
11: * SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
12: * DIGITAL MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE FOR
13: * ANY PURPOSE. IT IS SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
14: *
15: * IF THE SOFTWARE IS MODIFIED IN A MANNER CREATING DERIVATIVE COPYRIGHT RIGHTS,
16: * APPROPRIATE LEGENDS MAY BE PLACED ON THE DERIVATIVE WORK IN ADDITION TO THAT
17: * SET FORTH ABOVE.
18: *
19: *
20: * Permission to use, copy, modify, and distribute this software and its
21: * documentation for any purpose and without fee is hereby granted, provided
22: * that the above copyright notice appear in all copies and that both that
23: * copyright notice and this permission notice appear in supporting documentation,
24: * and that the name of Digital Equipment Corporation not be used in advertising
25: * or publicity pertaining to distribution of the software without specific,
26: * written prior permission.
27: */
28:
29: /* main.c */
30:
31: #define MAIN 1 /* Makes global.h actually declare vars */
32: #include "xmh.h"
33: #include <signal.h>
34:
35: Boolean shouldcheckscans; /* If it's time to check for rescanning */
36: Boolean emptying = FALSE; /* Whether we're currently in EmptyEventQueue. */
37:
38:
39: /* Handle one event. Will block if there are no events to handle. */
40:
41: HandleEvent()
42: {
43: XEvent event;
44: int i;
45: static int lasttime, lastx, lasty;
46: static Window lastwin;
47: QXNextEvent(theDisplay, &event);
48: if (shouldcheckscans && !emptying) {
49: if (debug) {
50: (void) fprintf(stderr, "[magic toc check ...");
51: (void) fflush(stderr);
52: }
53: QXPutBackEvent(theDisplay, &event);
54: shouldcheckscans = FALSE;
55: for (i = 0; i < numScrns; i++) {
56: if (scrnList[i]->toc)
57: TocRecheckValidity(scrnList[i]->toc);
58: if (scrnList[i]->msg)
59: TocRecheckValidity(MsgGetToc(scrnList[i]->msg));
60: }
61: (void) alarm(5 * 60);
62: if (debug) {(void)fprintf(stderr, "done]\n");(void)fflush(stderr);}
63: }
64: else {
65: (void)XtDispatchEvent(&event);
66: #ifdef X11
67: if (defDoubleClick) {
68: if (event.xany.type == ButtonPress && DoubleClickProc
69: && event.xbutton.window == lastwin
70: && event.xbutton.x == lastx && event.xbutton.y == lasty
71: && event.xbutton.time - lasttime <= 500) {
72: (*DoubleClickProc)(DoubleClickParam);
73: DoubleClickProc = NULL;
74: }
75: if (event.xany.type == ButtonRelease) {
76: lasttime = event.xbutton.time;
77: lastx = event.xbutton.x;
78: lasty = event.xbutton.y;
79: lastwin = event.xbutton.window;
80: } else DoubleClickProc = NULL;
81: }
82: #endif X11
83: HandleConfirmEvent(&event);
84: }
85: }
86:
87: #ifdef X10
88: EmptyEventQueue()
89: {
90: XEvent event;
91: emptying = TRUE;
92: do {
93: while (XPending()) {
94: XPeekEvent(&event);
95: if (event.type & (KeyPressed | KeyReleased | MouseMoved |
96: ButtonPressed | ButtonReleased))
97: XNextEvent(&event);
98: else
99: HandleEvent();
100: }
101: XSync(0);
102: } while (XPending());
103: emptying = FALSE;
104: }
105: #endif
106:
107:
108: /* This gets called by the alarm clock every five minutes. */
109:
110: NeedToCheckScans()
111: {
112: shouldcheckscans = TRUE;
113: }
114:
115:
116:
117: #ifdef X11
118: CheckMail(event)
119: XEvent *event;
120: {
121: static int count = 0;
122: int i;
123: if (event->type == ClientMessage &&
124: ((int)event->xclient.message_type) == XtTimerExpired) {
125: if (defNewMailCheck) {
126: if (debug) {(void)fprintf(stderr, "(Checking for new mail..."); (void)fflush(stderr);}
127: TocCheckForNewMail();
128: if (debug) (void)fprintf(stderr, "done)\n");
129: }
130: if (defMakeCheckpoints && count++ % 5 == 0) {
131: if (debug) {(void)fprintf(stderr, "(Checkpointing..."); (void)fflush(stderr);}
132: for (i=0 ; i<numScrns ; i++)
133: if (scrnList[i]->msg)
134: MsgCheckPoint(scrnList[i]->msg);
135: if (debug) (void)fprintf(stderr, "done)\n");
136: }
137: }
138: }
139: #endif X11
140:
141: /* Main loop. */
142:
143: main(argc, argv)
144: int argc;
145: char **argv;
146: {
147: InitializeWorld(argc, argv);
148: shouldcheckscans = TRUE;
149: (void) signal(SIGALRM, NeedToCheckScans);
150: #ifdef X11
151: if (defNewMailCheck)
152: TocCheckForNewMail();
153: if (defNewMailCheck || defMakeCheckpoints) {
154: XtSetEventHandler(theDisplay, DefaultRootWindow(theDisplay), CheckMail,
155: StructureNotifyMask, (caddr_t)NULL);
156: XtSetTimeOut(DefaultRootWindow(theDisplay), (caddr_t)NULL, (int)60000);
157: }
158: #endif X11
159: for (;;) {
160: HandleEvent();
161: }
162: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.