home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-06-21 | 1.9 KB | 99 lines | [TEXT/CWIE] |
- #include "SystemIdle.h"
- #include "TimeUtils.h"
- #include <Threads.h>
-
- static SystemEventHandlerUPP gSystemEventHandlerUPP = nil;
- static long gSystemEventHandlerRefcon = nil;
- static long gWNENestLevel = 0;
- static EventParams* gEventParams = nil;
- static bool gEnableThreading = false;
-
- pascal OSErr InstallSystemEventHandler(
- SystemEventHandlerUPP handler,
- long handlerRefcon,
- EventParamsPtr eventParams)
- {
- gSystemEventHandlerUPP = handler;
- gSystemEventHandlerRefcon = handlerRefcon;
- gEventParams = eventParams;
-
- return noErr;
- }
-
- pascal OSErr GetSystemEventHandler(
- SystemEventHandlerUPP* handler,
- long* handlerRefcon)
- {
- *handler = gSystemEventHandlerUPP;
- *handlerRefcon = gSystemEventHandlerRefcon;
-
- return noErr;
- }
-
- pascal OSErr SystemIdle(void)
- {
- EventParams* parms = gEventParams;
- OSErr err = noErr;
-
- if (parms != nil)
- {
- if (gEnableThreading)
- {
- YieldToAnyThread();
- }
-
- bool gotNull;
-
- if (gSystemEventHandlerUPP)
- {
- gotNull = XWaitNextEvent(parms->mask, &parms->event, parms->sleep, parms->mouseRgn);
- err = CallSystemEventHandlerProc(gSystemEventHandlerUPP, &parms->event, &parms->sleep, &parms->mouseRgn, parms->refcon);
- }
-
- if (gotNull && (err == noErr || err == errAEEventNotHandled))
- {
- while (parms->event.what == nullEvent)
- {
- if (TimeExpired(TickCount(), parms->event.when, parms->event.when + parms->wakeTime))
- {
- break;
- }
- else
- {
- YieldToAnyThread();
- }
- }
- }
- }
- else if (gEnableThreading)
- {
- YieldToAnyThread();
- }
- else // About all we can do
- {
- SystemTask();
- }
-
- return err;
- }
-
- pascal Boolean XWaitNextEvent(
- EventMask eventMask,
- EventRecord * theEvent,
- UInt32 sleep,
- RgnHandle mouseRgn)
- {
- Boolean result;
-
- if (gWNENestLevel > 0)
- {
- result = false;
- }
- else
- {
- result = WaitNextEvent(eventMask, theEvent, sleep, mouseRgn);
- }
-
- return result;
- }
-