#ifndef __KHIMAIRA_KHERRORINTERNAL_H
#define __KHIMAIRA_KHERRORINTERNAL_H
#define _NIMLIB_
#include<windows.h>
#include<kherr.h>
#include<utils.h>
#include<strsafe.h>
#define IS_KHERR_CTX(c) ((c) && (c)->magic == KHERR_CONTEXT_MAGIC)
#define IS_KHERR_EVENT(e) ((e) && (e)->magic == KHERR_EVENT_MAGIC)
typedef struct tag_kherr_thread {
khm_size nc_ctx;
khm_size n_ctx;
kherr_context ** ctx;
} kherr_thread;
#define THREAD_STACK_SIZE 8
typedef struct tag_kherr_handler_node {
khm_int32 filter;
kherr_ctx_handler h;
kherr_serial serial;
} kherr_handler_node;
#define CTX_ALLOC_INCR 4
#define EVENT_MASK_UNRESOLVED \
(KHERR_RF_RES_SHORT_DESC|KHERR_RF_MSG_SHORT_DESC| \
KHERR_RF_RES_LONG_DESC|KHERR_RF_MSG_LONG_DESC| \
KHERR_RF_RES_SUGGEST|KHERR_RF_MSG_SUGGEST)
extern CRITICAL_SECTION cs_error;
extern DWORD tls_error;
extern kherr_context * ctx_free_list;
extern kherr_event * evt_free_list;
extern kherr_handler_node * ctx_handlers;
extern khm_size n_ctx_handlers;
#define parm_type(p) ((p).type)
#define parm_data(p) ((p).data)
void resolve_event_strings(kherr_event *);
void attach_this_thread(void);
void detach_this_thread(void);
#endif