#define NO_ACTION 0 #define UPDATE 1 #define REDO 2 #define CONTINUE 3 #define TRUE 1 #define FALSE 0 #define NOSTATS -1 #define GET_STATS -2 extern int master_slave_trace; extern void (*master_slave_trace_cmd)();/*takes two arg's: dest, task/result */ extern int task_size, result_size; void master_slave(); void raw_master_slave(); int is_up_to_date(); int continuation(); /* This should be randomized and neg, so as not to conflict with user one? */ #define NO_PENDING_TASK (void * )-1000 #ifndef EXTERN #define EXTERN extern #endif EXTERN int mas_slave_is_task; EXTERN int mas_slave_is_msg; EXTERN void *mas_slave_msg_ptr; EXTERN int mas_slave_msg_size; EXTERN int mas_slave_msg_is_int; #define MSG(PTR,SIZE) \ (mas_slave_is_msg = TRUE, mas_slave_msg_size = SIZE, mas_slave_msg_ptr = PTR,\ error_if_msg_on_stack(mas_slave_msg_ptr), mas_slave_msg_ptr) #define NOTASK ((void *)(mas_slave_is_task = FALSE)) #define MARKER 2074215192 /* hack for sending int inside pointer */ /* Cast (void *) to int, avoid warnings from compiler about truncation */ #define INT(x) ((char *)x - (char *)0)