/*******************************/
/*  sem_interface.h by IoDream */
/* sem_server client interface */
/*   Not released yet          */
/*       PUBLIC DOMAIN         */
/*******************************/

/* IoDream (IoDream@ifrance.com) */

#ifndef sem_interface_h
#define sem_interface_h

/* C++ compilers friendly */
#ifdef __cplusplus
extern "C" {
#endif /*__cplusplus*/

#include "sem_gen.h"

/* Fill the p_request string with request (req, id).
   Return 0 if OK, or -1 in case of failure.
   Note: don't forget to allocate enough space to the string. */
extern int sem_request_create(int req, int id, char *p_request);

/* Send the request (req, id) to the sem_server @server:port_number.
   Return TRUE if OK, FALSE if an error occured (check *p_error), or -1 in case of system failure.
   Note: the p_error string is dynamically allocated, so don't forget to free it after use. */
extern int sem_request_send(char *server, short port_number, int req, int id, char **p_error);

/* Send the request string to the sem_server @server:port_number.
   Return TRUE if OK, FALSE if an error occured (check *p_error), or -1 in case of system failure.
   Note: the p_error string is dynamically allocated, so don't forget to free it after use. */
extern int sem_request_send_string(char *server, short port_number, char *string, char **p_error);

/* Macros to make programming easier */
#define sem_request_send_create(server, port, id, error) sem_request_send(server, port_number, SEM_REQ_CREATE, id, error)
#define sem_request_send_destroy(server, port, id, error) sem_request_send(server, port_number, SEM_REQ_DESTROY, id, error)
#define sem_request_send_wait(server, port, id, error) sem_request_send(server, port_number, SEM_REQ_WAIT, id, error)
#define sem_request_send_release(server, port, id, error) sem_request_send(server, port_number, SEM_REQ_RELEASE, id, error)
#define sem_request_send_reset(server, port, error) sem_request_send(server, port_number, SEM_REQ_RESET, 0, error)

/* C++ compilers friendly */
#ifdef __cplusplus
}
#endif /*__cplusplus*/

#endif /*sem_interface_h*/
