#ifndef	_TB_LIB_H
#define	_TB_LIB_H

#ifndef	_TB_DEFS_H
#	include	"tb_defs.h"
#endif

typedef struct _listdata
{
	struct _listdata	   *next;
	unsigned int			att ;
	size_t					siz ;
	void				   *ptr ;
} LISTDATA;

typedef struct
{
	LISTDATA			   *datTop ;
	LISTDATA			   *datLast;
	int						numDat ;
	size_t					sizDat ;
} LISTCTRL;

typedef struct
{
	const char	   *name;
	int				no;
} SEARCHKEYTBL;


#ifndef	CHKCLOCK
#	define	_CLOCK_MAX	(24*60*60*CLOCKS_PER_SEC)
#	define	CHKCLOCK(_clk,_clkNow)						\
	((_clkNow) = clock(),((_clk) < _CLOCK_MAX) 			\
		? ((_clkNow) < (_clk))							\
		: ((_clkNow) + _CLOCK_MAX > (_clk)				\
		  ? 1 : ((_clkNow) + _CLOCK_MAX < (_clk))) )
#endif

#define	MALLOC	malloc
#define	CALLOC	calloc
#define	FREE	free

extern LISTCTRL	   *tb_listctrl_open(void);
extern void			tb_listctrl_close( LISTCTRL *listctrl);
extern void			tb_listctrl_clear( LISTCTRL *listctrl);
extern LISTDATA	   *tb_list_allocData(size_t size);
extern LISTDATA	   *tb_list_allocName(const char *name);
extern void			tb_list_linkData( LISTCTRL *listctrl, LISTDATA *listdata );
extern int			tb_list_putf( LISTCTRL *listctrl, const char *form, ... );

extern int			tb_search_key( const char *s, SEARCHKEYTBL *tbl, size_t tblnum );

extern DATETIME	   *tb_getNowDate( DATETIME *date );
extern char		   *tb_date2asc(char *buf, DATETIME *date);

#endif
