/* -*-C-*- $Id: os2thrd.h,v 1.4 1999/01/02 06:11:34 cph Exp $ Copyright (c) 1994-1999 Massachusetts Institute of Technology This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef SCM_OS2THRD_H #define SCM_OS2THRD_H typedef void (* thread_procedure_t) (void *); typedef void (* error_hook_t) (msg_t *); typedef struct { error_hook_t error_hook; jmp_buf error_restart; PEXCEPTIONREGISTRATIONRECORD exception_handler; qid_t error_queue; char fatal_error_buffer [1024]; } thread_store_t; #define THREAD_ERROR_HOOK() ((* (OS2_threadstore ())) -> error_hook) #define THREAD_ERROR_RESTART() ((* (OS2_threadstore ())) -> error_restart) #define THREAD_ERROR_QUEUE() ((* (OS2_threadstore ())) -> error_queue) #define THREAD_FATAL_ERROR_BUFFER() \ ((* (OS2_threadstore ())) -> fatal_error_buffer) #define THREAD_EXCEPTION_HANDLER() \ ((* (OS2_threadstore ())) -> exception_handler) typedef struct { DECLARE_MSG_HEADER_FIELDS; int code; enum syscall_names name; } sm_syscall_error_t; #define SM_SYSCALL_ERROR_CODE(m) (((sm_syscall_error_t *) (m)) -> code) #define SM_SYSCALL_ERROR_NAME(m) (((sm_syscall_error_t *) (m)) -> name) typedef struct { DECLARE_MSG_HEADER_FIELDS; long code; } sm_error_t; #define SM_ERROR_CODE(m) (((sm_error_t *) (m)) -> code) typedef msg_t sm_kill_request_t; #define OS2_make_kill_request() OS2_create_message (mt_kill_request) extern TID OS2_beginthread (thread_procedure_t, void *, unsigned int); extern void OS2_endthread (void); extern void OS2_kill_thread (TID); extern TID OS2_current_tid (void); #ifdef __IBMC__ #define OS2_threadstore() ((thread_store_t **) (_threadstore ())) #else extern thread_store_t ** OS2_threadstore (void); #endif extern PID OS2_scheme_pid; extern TID OS2_scheme_tid; extern int OS2_thread_initialize (PEXCEPTIONREGISTRATIONRECORD, qid_t); extern int OS2_thread_initialize_1 (PEXCEPTIONREGISTRATIONRECORD, qid_t); extern int OS2_error_message_p (msg_t *); extern void OS2_handle_error_message (msg_t *); extern void OS2_ignore_errors (void); extern void OS2_error_system_call (int, enum syscall_names); extern void OS2_error_anonymous (void); extern void OS2_error_unimplemented_primitive (void); extern void OS2_error_out_of_channels (void); extern msg_t * OS2_make_syscall_error (int, enum syscall_names); extern msg_t * OS2_make_error (long); #endif /* SCM_OS2THRD_H */