#if !defined(IIIMP_MESSAGE_H)
#define IIIMP_MESSAGE_H


#include <iiimp-data.h>

#ifdef	__cplusplus
extern "C" {
#endif


/* prototype of message free function */

typedef void	(* IIIMP_message_delete_func)(IIIMP_data_s * data_s, IIIMP_message * m);

extern void	iiimp_invalid_message_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_connect_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_connect_reply_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_simple_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_register_trigger_keys_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_trigger_notify_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_register_hotkeys_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_hotkey_notify_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_hotkey_state_notify_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_select_hotkey_profile_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_file_operation_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_file_operation_reply_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_setimvalues_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_getimvalues_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_getimvalues_reply_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_forward_event_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_commit_string_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_forward_event_with_operations_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_forward_event_with_operations_reply_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_createic_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_seticvalues_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_geticvalues_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_geticvalues_reply_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_preedit_start_reply_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_preedit_draw_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_status_draw_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_lookup_choice_start_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_lookup_choice_draw_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_lookup_choice_process_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_aux_simple_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_aux_value_delete(IIIMP_data_s * data_s, IIIMP_message * m);
extern void	iiimp_protocol_version_delete(IIIMP_data_s * data_s, IIIMP_message * m);


/* prototype of message unpack function */

#define IIIMP_UNPACK_ARGS \
	IIIMP_data_s *		data_s, \
	IIIMP_card7		opcode, \
	size_t *		nbyte, \
	const uchar_t **	ptr

typedef IIIMP_message * (* IIIMP_message_unpack_func)(IIIMP_UNPACK_ARGS);

extern IIIMP_message *	iiimp_invalid_message_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_connect_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_connect_reply_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_simple_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_simple_im_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_register_trigger_keys_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_trigger_notify_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_register_hotkeys_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_hotkey_notify_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_hotkey_state_notify_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_select_hotkey_profile_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_file_operation_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_file_operation_reply_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_setimvalues_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_getimvalues_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_getimvalues_reply_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_forward_event_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_commit_string_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_forward_event_with_operations_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_forward_event_with_operations_reply_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_invalid_message_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_invalid_message_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_invalid_message_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_createic_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_seticvalues_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_geticvalues_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_geticvalues_reply_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_preedit_start_reply_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_preedit_draw_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_invalid_message_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_invalid_message_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_status_draw_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_lookup_choice_start_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_lookup_choice_draw_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_lookup_choice_process_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_aux_value_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_aux_simple_unpack(IIIMP_UNPACK_ARGS);
extern IIIMP_message *	iiimp_protocol_version_unpack(IIIMP_UNPACK_ARGS);

#undef IIIMP_UNPACK_ARGS


#ifdef	__cplusplus
}
#endif

#endif /* !IIIMP_MESSAGE_H */


/* Local Variables: */
/* c-file-style: "iiim-project" */
/* End: */
