U0 BgtAcctsUpdate()
{
	CBgtEntry 		*tmpb;
	CBgtTemplate	*tmpt;

	tmpb=b_head.next;
	while (tmpb != &b_head)
	{
		if (tmpb->type != BE_TEMPLATE_COPY)
		{
			tmpb->credit_idx = StrFileAdd(tmpb->credit, &accts_table_strs, accts_table);
			tmpb->debit_idx  = StrFileAdd(tmpb->debit,  &accts_table_strs, accts_table);
		}
		tmpb=tmpb->next;
	}
	tmpt=t_head.next;
	while (tmpt != &t_head)
	{
		tmpt->b.credit_idx = StrFileAdd(tmpt->b.credit, &accts_table_strs, accts_table);
		tmpt->b.debit_idx  = StrFileAdd(tmpt->b.debit,  &accts_table_strs, accts_table);
		tmpt=tmpt->next;
	}
}

U0 BgtAcctsWrite()
{
	BgtAcctsUpdate;
	StrFileWrite(bgt_accts_file, accts_table, TRUE);
}

U0 BgtAcctsRead()
{
	I64 	i, max_num;
	U8		*colors, **s = StrFileRead(bgt_accts_file, &max_num, &colors, TRUE);

	StrFileDel(accts_table);
	accts_table = HashTableNew(512);
	accts_table_strs = 0;
	for (i = 0; i <= max_num; i++)
		if (s[i])
			StrFileAdd(s[i], &accts_table_strs, accts_table, colors[i]);
	StrFileArrDel(s, max_num);
	Free(colors);
}

I64 BgtAcctColor(U8 *st)
{
	CHashGeneric *tmph;

	if (tmph = HashFind(st, accts_table, SFT_GENERIC))
		return tmph->user_data1;
	else
		return BLACK;
}

U8 *BgtPopUpAcct(U8 *header=NULL, U8 *default=NULL)
{
	I64				 i;
	U8				*res;
	CDoc			*doc = DocNew;
	CDocEntry		*doc_e, *doc_default = NULL;
	CHashGeneric	*tmph;

	if (header)
		DocPrint(doc, "%s", header);

	for (i = 0; i <= accts_table->mask; i++)
	{
		tmph = accts_table->body[i];
		while (tmph)
		{
			doc_e = DocPrint(doc, "$$FG,%d$$$$MU-UL,\"%s\",LE=0x%X$$\n", tmph->user_data1, tmph->str, tmph->str);
			if (default && !StrCompare(default, tmph->str))
				doc_default = doc_e;
			tmph = tmph->next;
		}
	}

	if (doc_default)
	{
		doc->cur_entry = doc_default;
		doc->cur_col = 0;
	}
	res = PopUpMenu(doc, DOF_DONT_HOME);
	DocDel(doc);

	return res;
}
