1 /* Copyright (C) 1992, 1994 Aladdin Enterprises. All rights reserved. 2 3 This software is provided AS-IS with no warranty, either express or 4 implied. 5 6 This software is distributed under license and may not be copied, 7 modified or distributed except as expressly authorized under the terms 8 of the license contained in the file LICENSE in this distribution. 9 10 For more information about licensing, please refer to 11 http://www.ghostscript.com/licensing/. For information on 12 commercial licensing, go to http://www.artifex.com/licensing/ or 13 contact Artifex Software, Inc., 101 Lucas Valley Road #110, 14 San Rafael, CA 94903, U.S.A., +1(415)492-9861. 15 */ 16 17 /* $Id: gpcheck.h,v 1.9 2004/08/13 12:59:03 stefan Exp $ */ 18 /* Interrupt check interface */ 19 20 #ifndef gpcheck_INCLUDED 21 # define gpcheck_INCLUDED 22 23 /* 24 * On some platforms, the interpreter must check periodically for user- 25 * initiated actions. (Eventually, this may be extended to all platforms, 26 * to handle multi-tasking through the 'context' facility.) Routines that 27 * run for a long time must periodically call gp_check_interrupts(), and 28 * if it returns true, must clean up whatever they are doing and return an 29 * e_interrupted (or gs_error_interrupted) exceptional condition. 30 * The return_if_interrupt macro provides a convenient way to do this. 31 * 32 * On platforms that require an interrupt check, the makefile defines 33 * a symbol CHECK_INTERRUPTS. Currently this is only the Microsoft 34 * Windows platform. 35 */ 36 int gs_return_check_interrupt(const gs_memory_t *mem, int code); 37 38 #ifdef CHECK_INTERRUPTS 39 int gp_check_interrupts(const gs_memory_t *mem); 40 # define process_interrupts(mem) discard(gp_check_interrupts(mem)) 41 # define return_if_interrupt(mem)\ 42 { int icode_ = gp_check_interrupts(mem); \ 43 if ( icode_ )\ 44 return gs_note_error((icode_ > 0 ? gs_error_interrupt : icode_));\ 45 } 46 # define return_check_interrupt(mem, code) \ 47 return gs_return_check_interrupt(mem, code) 48 # define set_code_on_interrupt(mem, pcode) \ 49 if (*(pcode) == 0)\ 50 *(pcode) = (gp_check_interrupts(mem) != 0) ? gs_error_interrupt : 0; 51 #else 52 # define gp_check_interrupts(mem) 0 53 # define process_interrupts(mem) DO_NOTHING 54 # define return_if_interrupt(mem) DO_NOTHING 55 # define return_check_interrupt(mem, code) \ 56 return (code) 57 # define set_code_on_interrupt(mem, code) DO_NOTHING 58 #endif 59 60 #endif /* gpcheck_INCLUDED */ 61