1*593dc095SDavid du Colombier /* Copyright (C) 2001-2003 artofcode LLC. All rights reserved.
2*593dc095SDavid du Colombier
3*593dc095SDavid du Colombier This software is provided AS-IS with no warranty, either express or
4*593dc095SDavid du Colombier implied.
5*593dc095SDavid du Colombier
6*593dc095SDavid du Colombier This software is distributed under license and may not be copied,
7*593dc095SDavid du Colombier modified or distributed except as expressly authorized under the terms
8*593dc095SDavid du Colombier of the license contained in the file LICENSE in this distribution.
9*593dc095SDavid du Colombier
10*593dc095SDavid du Colombier For more information about licensing, please refer to
11*593dc095SDavid du Colombier http://www.ghostscript.com/licensing/. For information on
12*593dc095SDavid du Colombier commercial licensing, go to http://www.artifex.com/licensing/ or
13*593dc095SDavid du Colombier contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14*593dc095SDavid du Colombier San Rafael, CA 94903, U.S.A., +1(415)492-9861.
15*593dc095SDavid du Colombier */
16*593dc095SDavid du Colombier
17*593dc095SDavid du Colombier /* $Id: gp_macpoll.c,v 1.3 2004/12/09 00:59:59 giles Exp $ */
18*593dc095SDavid du Colombier /*
19*593dc095SDavid du Colombier * Macintosh platform polling support for Ghostscript.
20*593dc095SDavid du Colombier *
21*593dc095SDavid du Colombier */
22*593dc095SDavid du Colombier
23*593dc095SDavid du Colombier #ifndef __CARBON__
24*593dc095SDavid du Colombier #include <Timer.h>
25*593dc095SDavid du Colombier #else
26*593dc095SDavid du Colombier #include <Carbon.h>
27*593dc095SDavid du Colombier #endif
28*593dc095SDavid du Colombier
29*593dc095SDavid du Colombier #include "gx.h"
30*593dc095SDavid du Colombier #include "gp.h"
31*593dc095SDavid du Colombier #include "gsdll.h"
32*593dc095SDavid du Colombier #include "gpcheck.h"
33*593dc095SDavid du Colombier #include "iapi.h"
34*593dc095SDavid du Colombier #include "iref.h"
35*593dc095SDavid du Colombier #include "iminst.h"
36*593dc095SDavid du Colombier #include "imain.h"
37*593dc095SDavid du Colombier
38*593dc095SDavid du Colombier #ifdef CHECK_INTERRUPTS
39*593dc095SDavid du Colombier
40*593dc095SDavid du Colombier extern HWND hwndtext;
41*593dc095SDavid du Colombier
42*593dc095SDavid du Colombier /* ------ Process message loop ------ */
43*593dc095SDavid du Colombier /*
44*593dc095SDavid du Colombier * Check messages and interrupts; return true if interrupted.
45*593dc095SDavid du Colombier * This is called frequently - it must be quick!
46*593dc095SDavid du Colombier */
gp_check_interrupts(const gs_memory_t * mem)47*593dc095SDavid du Colombier int gp_check_interrupts(const gs_memory_t *mem)
48*593dc095SDavid du Colombier {
49*593dc095SDavid du Colombier /* static variables need to go away for thread safety */
50*593dc095SDavid du Colombier static unsigned long lastYieldTicks = 0;
51*593dc095SDavid du Colombier int iRetVal = 0;
52*593dc095SDavid du Colombier
53*593dc095SDavid du Colombier if ((TickCount() - lastYieldTicks) > 2) {
54*593dc095SDavid du Colombier lastYieldTicks = TickCount();
55*593dc095SDavid du Colombier if (pgsdll_callback) {
56*593dc095SDavid du Colombier /* WARNING: The use of the old gsdll interface is deprecated.
57*593dc095SDavid du Colombier * The caller should use the newer gsapi_set_poll.
58*593dc095SDavid du Colombier * If the caller needs access to "hwndtext", it should do
59*593dc095SDavid du Colombier * this via caller_handle which is passed to poll_fn.
60*593dc095SDavid du Colombier */
61*593dc095SDavid du Colombier /* the hwnd parameter which is submitted in gsdll_init
62*593dc095SDavid du Colombier * to the DLL is returned in every gsdll_poll message
63*593dc095SDavid du Colombier * in the count parameter
64*593dc095SDavid du Colombier */
65*593dc095SDavid du Colombier iRetVal = (*pgsdll_callback)(GSDLL_POLL, 0, (long) hwndtext);
66*593dc095SDavid du Colombier } else {
67*593dc095SDavid du Colombier if (mem == NULL) {
68*593dc095SDavid du Colombier /* this is not thread safe */
69*593dc095SDavid du Colombier mem = gs_lib_ctx_get_non_gc_memory_t();
70*593dc095SDavid du Colombier }
71*593dc095SDavid du Colombier if (mem && mem->gs_lib_ctx && mem->gs_lib_ctx->poll_fn)
72*593dc095SDavid du Colombier iRetVal = (*mem->gs_lib_ctx->poll_fn)(mem->gs_lib_ctx->caller_handle);
73*593dc095SDavid du Colombier }
74*593dc095SDavid du Colombier }
75*593dc095SDavid du Colombier return iRetVal;
76*593dc095SDavid du Colombier }
77*593dc095SDavid du Colombier #endif
78