xref: /plan9/sys/src/cmd/gs/src/gp_macpoll.c (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
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