#ifndef DOARGS_H
#define DOARGS_H

/************************************************************************/
/* DoArgs.h																*/
/*																		*/
/* Sophisticated argument evaluation									*/
/************************************************************************/

#ifndef UTILITY_TAGITEM_H
#	include <utility/tagitem.h>
#endif

typedef struct {
	void	 *DAK_MemPool;
	STRPTR	  DAK_Template;
	int		  DAK_NArgs;
	LONG	 *DAK_Array;
	int		  DAK_ArgC;
	char	**DAK_ArgV;
} DAKey;

/* -------------------------------------------------------------------- */
/* Tags valid for all parameter types									*/
/* -------------------------------------------------------------------- */

#define DA_Dummy			(TAG_USER + 10000)

#define DA_Type				(DA_Dummy +     0)	// datatype specifier
#define DA_Result			(DA_Dummy +     1)	// pointer to pointer to data or pointer to data
#define DA_Default			(DA_Dummy +     2)	// default value or pointer there
#define DA_Minval			(DA_Dummy +     3)  // minimum required value or pointer there
#define DA_Maxval			(DA_Dummy +     4)	// minimum required value or pointer there
#define DA_Name				(DA_Dummy +     5)	// parameter name
#define DA_Alias			(DA_Dummy +     6)	// alternative parameter name
#define DA_Helptext			(DA_Dummy +     7)	// extended help
#define DA_Passed_Private	(DA_Dummy +     8)  // private!
#define DA_Required_S		(DA_Dummy +     9)	// private!
#define DA_Required			DA_Passed_Private, FALSE,\
							DA_Required_S
#define DA_TTIconName		(DA_Dummy +    10)	// char *, name of icon for tooltypes
#define DA_FailOnBounds		(DA_Dummy +    11)	// BOOL
#define DA_Passed			(DA_Dummy +    12)	// BOOL *
#define DA_ProvideMem		(DA_Dummy +    13)	// BOOL
#define DA_AngleModulo360	(DA_Dummy +    14)	// BOOL, angle is modulo 360°
#define DA_AngleModulo180	(DA_Dummy +    15)	// BOOL, angle is modulo 180°
#define DA_AngleModulo90	(DA_Dummy +    16)	// BOOL, angle is modulo 90°
#define DA_AngleModulo		(DA_Dummy +    17)	// double *, arbitrary modulo

/* -------------------------------------------------------------------- */
/* definitions for DA_Type												*/
/* -------------------------------------------------------------------- */

#define DAT_BOOL			1
#define DAT_INTEGER			2
#define DAT_UNSIGNED		3
#define DAT_STRING			4
#define DAT_MULTIPLE		5
#define DAT_DOUBLE			6
#define DAT_ANGLE			7

extern DAKey *DoArgs( int, char **, ... );
extern void FreeDAKey( DAKey * );

#endif
