/*
 * Mktclapp support defs
 * taken from:
 * (find-fline "~/MTA/vtutilsh.c")
 *
 */

#include "mktclapp.h"

#define ET_ERRORF(listargs) ({Et_ResultF listargs; return TCL_ERROR;})
#define ET_ERROR(str) ET_ERRORF((interp,str))
#define ET_ERROR1(str,a) ET_ERRORF((interp,str,a))
#define ET_ERROR2(str,a,b) ET_ERRORF((interp,str,a,b))
#define ET_ERROR3(str,a,b,c) ET_ERRORF((interp,str,a,b,c))
#define ET_ERROR4(str,a,b,c,d) ET_ERRORF((interp,str,a,b,c,d))

#define OARGV_STRING(n, lenptr)	Tcl_GetStringFromObj(objv[n], lenptr)

#define OARGV0			OARGV_STRING(0, 0)

#define OARGV_INT(n) ({		\
  int _tmpint;			\
  if (Tcl_GetIntFromObj(interp, objv[n], &_tmpint) != TCL_OK)	\
    ET_ERROR2("%s: arg %d not an int", OARGV0, n);	\
  _tmpint;			\
})


#define ET_OARGSERROR(argstr)	\
  ET_ERROR2("wrong # args: should be \"%s %s\"", OARGV0, argstr)

#define ET_ARGSERROR(argstr)	\
  ET_ERROR2("wrong # args: should be \"%s %s\"", argv[0], argstr)


#define ET_ORETURN(data, len)					\
  Tcl_SetObjResult(interp, Tcl_NewStringObj(data, len))

#define ET_OINTRETURN(n)					\
  Tcl_SetObjResult(interp, Tcl_NewIntObj(n))
