#ifndef _ATTR_H_INCLUDED_
#define _ATTR_H_INCLUDED_
#include <stdarg.h>
#include <vstream.h>
#define ATTR_TYPE_END 0
#define ATTR_TYPE_INT 1
#define ATTR_TYPE_NUM ATTR_TYPE_INT
#define ATTR_TYPE_STR 2
#define ATTR_TYPE_HASH 3
#define ATTR_TYPE_NV 3
#define ATTR_TYPE_LONG 4
#define ATTR_TYPE_DATA 5
#define ATTR_TYPE_FUNC 6
#define ATTR_HASH_LIMIT 1024
#define ATTR_FLAG_NONE 0
#define ATTR_FLAG_MISSING (1<<0)
#define ATTR_FLAG_EXTRA (1<<1)
#define ATTR_FLAG_MORE (1<<2)
#define ATTR_FLAG_STRICT (ATTR_FLAG_MISSING | ATTR_FLAG_EXTRA)
#define ATTR_FLAG_ALL (07)
typedef int (*ATTR_SCAN_MASTER_FN) (VSTREAM *, int, ...);
typedef int (*ATTR_SCAN_SLAVE_FN) (ATTR_SCAN_MASTER_FN, VSTREAM *, int, void *);
typedef int (*ATTR_PRINT_MASTER_FN) (VSTREAM *, int,...);
typedef int (*ATTR_PRINT_SLAVE_FN) (ATTR_PRINT_MASTER_FN, VSTREAM *, int, void *);
#define attr_print attr_print0
#define attr_vprint attr_vprint0
#define attr_scan attr_scan0
#define attr_vscan attr_vscan0
extern int attr_print64(VSTREAM *, int,...);
extern int attr_vprint64(VSTREAM *, int, va_list);
extern int attr_scan64(VSTREAM *, int,...);
extern int attr_vscan64(VSTREAM *, int, va_list);
extern int attr_print0(VSTREAM *, int,...);
extern int attr_vprint0(VSTREAM *, int, va_list);
extern int attr_scan0(VSTREAM *, int,...);
extern int attr_vscan0(VSTREAM *, int, va_list);
extern int attr_print_plain(VSTREAM *, int,...);
extern int attr_vprint_plain(VSTREAM *, int, va_list);
extern int attr_scan_plain(VSTREAM *, int,...);
extern int attr_vscan_plain(VSTREAM *, int, va_list);
#ifdef TEST
#define ATTR_NAME_INT "number"
#define ATTR_NAME_STR "string"
#define ATTR_NAME_LONG "long_number"
#define ATTR_NAME_DATA "data"
#endif
#endif