/* errprog.h */
/* see www.nongnu.org/trustnet/guide/ */

/* cc -I /usr/include/glib-1.2 -I /usr/lib/glib/include -lglib */
#include <glib.h>

#define ERRPROG 1
#define ERRNORM 2

#define E(expr) g_return_val_if_fail(!(expr),ERRPROG);

#define F(expr) g_return_val_if_fail((expr),ERRPROG);

#define EN(expr) F((expr)!=ERRPROG)

#define END F(FALSE)


#define N(expr) if (expr) return ERRNORM;

#define O(expr) if (!(expr)) return ERRNORM;

/* private temporary threadsafe var*/  
#define _ERRTMP {int _errprog_tmp;

#define NN(expr) _ERRTMP if (_errprog_tmp=(expr)) return _errprog_tmp;}

#define NV(expr,val) if (expr) return (val);

#define OV(expr,val) if (!(expr)) return (val);

#define NEND return ERRNORM;


#define S(expr) _ERRTMP EN(_errprog_tmp=(expr)) N(_errprog_tmp)}

#define SV(expr,val) _ERRTMP EN(_errprog_tmp=(expr)) NV(_errprog_tmp,val)}

#define SN(expr) _ERRTMP EN(_errprog_tmp=(expr)) if (_errprog_tmp) return _errprog_tmp;}

