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

DefineLstLoad("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=\"StartDate:%s\"$\n";
U8 end_date[16] format "$DA-P,A=\"EndDate:%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);
}