U8 *bgt_string_file;
U8 *bgt_accts_file;
U8 *bgt_data_file;

#define BE_NORMAL				0
#define BE_GAS					1
#define BE_ANNIVERSARY			2
#define BE_PRICE				3
#define BE_TEMPLATE_COPY		4

extern class CBgtTemplate;

class CBgtEntry
{
	CBgtEntry	*next, *last;

	U0				 start;
	CDate			 date;
	U16				 type, flags;
	U32				 credit_idx, debit_idx, desc_idx;
	F64				 amount;
	U0				 end;

	U8				*credit, *debit, *desc;
	CBgtTemplate	*template;
	CDocEntry		*doc_e;

} b_head;

#define BE_SIZE		(offset(CBgtEntry.end) - offset(CBgtEntry.start))

#define BT_NULL 		0
#define BT_INTERVAL		1
#define BT_MONTHLY		2
#define BT_BIMONTHLY	3
#define BT_SEMIANNUAL 	4
#define BT_ANNUAL 		5

DefineListLoad("ST_BGT_TEMPLATE_TYPES", "Null\0Interval\0Monthly\0Bimonthly\0Semiannual\0Annual\0");

class CBgtTemplate
{
	CBgtTemplate	*next, *last;

	U0				 start;
	U16				 type			format "$$LS,D=\"ST_BGT_TEMPLATE_TYPES\"$$\n";
	U16				 flags;
	U8				 start_date[16]	format "$$DA-P,A=\"Start Date:%s\"$$\n";
	U8				 end_date[16]	format "$$DA-P,A=\"End Date  :%s\"$$\n";
	F64				 period			format "$$DA,A=\"Period    :%8.2f\"$$\n";
	U0				 end;

	CBgtEntry		 b;

} t_head;

#define BT_SIZE		(offset(CBgtTemplate.end) - offset(CBgtTemplate.start))

U8			 view_acct[512];
CHashTable	*accts_table = NULL;
I64			 accts_table_strs = 0;

CDate MyStr2Date(U8 *st)
{
	CDateStruct ds;
	CDate 		res;

	if (st && *st)
	{
		if (StrOcc(st, '['))
			res = b_head.next->date;
		else if (StrOcc(st, ']'))
			res = b_head.last->date;
		else
			res = Str2Date(st);
	}
	else
		res = Now;
	Date2Struct(&ds, res);
	if (ds.year > 2050)
		ds.year -= 100;

	return Struct2Date(&ds);
}