/*
 * $Id: macros,v 1.2 1999/10/05 22:34:02 joseph Exp $
 *
 */

#ifndef MACROS_H
#define MACROS_H

#include "defines.h"

#include "wimplib.h"

#define E_CHECK(a) { _kernel_oserror *b=(a); if (b) wimp_report_error(b,0,TASK_NAME,0,0,0); }
#define E_CHECKRETURN(a,R) { _kernel_oserror *b=(a); if (b) { wimp_report_error(b,0,TASK_NAME,0,0,0); return R;} }
#define E_CHECKABORT(a) { _kernel_oserror *b=(a); if (b) { wimp_report_error(b,0,TASK_NAME,0,0,0); exit(1);} }
#define E_CHECK_ABORT(a) E_CHECKABORT(a)
#define E_RETURN(a) { _kernel_oserror *b=(a); if (b) return (b); }
#define E_MAKERETURN(a) { *err.errmess=0; strncat(err.errmess, (a), sizeof(err.errmess)-1); return &err; }

#define E_REPORT(a)       { _kernel_oserror eabort; \
			    eabort.errnum=0; \
			    *eabort.errmess=0; \
			    strncat(eabort.errmess, a, sizeof(eabort.errmess)-1); \
		     	    wimp_report_error(&eabort,0,TASK_NAME,0,0,0); \
                          }

#define MIN(a,b)       ( (a<b) ? (a) : (b) )
#define MAX(a,b)       ( (a>b) ? (a) : (b) )

#define isscheme(c) (isalpha(c) || c=='+' || c=='.' || c=='-')

/* standard E_CHECK_RETURN, as in wimpclib.h */
#define E_CHECK_RETURN(x,a) { \
  _kernel_oserror *b=(a); \
  if (b) { \
    wimp_report_error( b, 0, (char *) frontend_taskname, 0, 0, 0 ); \
    return x; \
  } \
}

#define E_ABORT(a) \
{ \
  _kernel_oserror eabort; \
  eabort.errnum=0; \
  *eabort.errmess=0; \
  strncat(eabort.errmess, a, sizeof(eabort.errmess)-1); \
  wimp_report_error(&eabort,0,TASK_NAME,0,0,0); \
  exit(1); \
}


#endif
